This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.

suppressMessages(library(tidyverse))
suppressMessages(library(stringr))
suppressMessages(library(ISLR))
suppressMessages(library(caret))
suppressMessages(library(doMC))
suppressMessages(library(plotly))
registerDoMC(cores=4)

Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.

When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).

Getting and proccesing the data

library(stringr)
myData = read.csv('./datasets/data_all_result.txt', stringsAsFactors = F, sep = ' ')
#Create data backup
myData.bkup <- myData
#Create new column: length of model, and number of periodicity, duration and size characteristic in the model.
myData = myData %>% mutate(letter_count = nchar(State))
#Periodicity
myData = myData %>% mutate(strong_p = str_count(State,'[a-i]'))
myData = myData %>% mutate(weak_p = str_count(State,'[A-I]'))
myData = myData %>% mutate(weak_np = str_count(State,'[r-z]'))
myData = myData %>% mutate(strong_np = str_count(State,'[R-Z]'))
#Duration
myData = myData %>% mutate(duration_s = str_count(State,'(a|A|r|R|1|d|D|u|U|4|g|G|x|X|7)'))
myData = myData %>% mutate(duration_m = str_count(State,'(b|B|s|S|2|e|E|v|V|5|h|H|y|Y|8)'))
myData = myData %>% mutate(duration_l = str_count(State,'(c|C|t|T|3|f|F|w|W|6|i|I|z|Z|9)'))
#Size
myData = myData %>% mutate(size_s = str_count(State,'[a-c]') + str_count(State,'[A-C]') + str_count(State,'[r-t]') + str_count(State,'[R-T]') + str_count(State,'[1-3]'))
myData = myData %>% mutate(size_m = str_count(State,'[d-f]') + str_count(State,'[D-F]') + str_count(State,'[u-w]') + str_count(State,'[U-W]') + str_count(State,'[4-6]'))
myData = myData %>% mutate(size_l = str_count(State,'[g-i]') + str_count(State,'[G-I]') + str_count(State,'[x-z]') + str_count(State,'[X-Z]') + str_count(State,'[7-9]'))
#Remove from LabelName unnecessary characters (ej: V42, -17)
myData <- myData %>% mutate(LabelName = gsub('V[0-9]+-','',LabelName))
myData <- myData %>% mutate(LabelName = gsub('-[0-9]+','',LabelName))
myData <- myData %>% mutate(LabelName = gsub('CC[0-9]+-','CC-',LabelName))
#Keep only connection with more than 3 symbols
myData <- myData %>% filter(letter_count > 3)
#Periodicity %
myData <- myData %>% mutate(strong_p = (strong_p / letter_count))
myData <- myData %>% mutate(weak_p = (weak_p / letter_count))
myData <- myData %>% mutate(strong_np = (strong_np / letter_count))
myData <- myData %>% mutate(weak_np = (weak_np / letter_count))
#Duration %
myData <- myData %>% mutate(duration_s = (duration_s / letter_count))
myData <- myData %>% mutate(duration_m = (duration_m / letter_count))
myData <- myData %>% mutate(duration_l = (duration_l / letter_count))
#Size %
myData <- myData %>% mutate(size_s = (size_s / letter_count))
myData <- myData %>% mutate(size_m = (size_m / letter_count))
myData <- myData %>% mutate(size_l = (size_l / letter_count))
#head(myData)
myData[1:20,]
#Making feature vectors
feature_vectors = myData[,c('strong_p','weak_p','weak_np','strong_np','duration_s','duration_m','duration_l','size_s','size_m','size_l','letter_count','Label','LabelName','port','proto')]
names(feature_vectors) = c("sp","wp","wnp","snp","ds","dm","dl","ss","sm","sl","length","class","subclass","port","proto")
feature_vectors$class = factor(feature_vectors$class)
feature_vectors$subclass = factor(feature_vectors$subclass)
feature_vectors$proto = factor(feature_vectors$proto)

Create training set and testset

set.seed(300)
trainIndex <- createDataPartition(feature_vectors$class, p=0.80, list=FALSE)
data_train <- feature_vectors[ trainIndex,]
data_test <- feature_vectors[-trainIndex,]
#data_train = data_train %>% filter(length>5)
train <- upSample(x = data_train,  y = data_train$class, yname="class")
#train <- upSample(x = train,  y = train$subclass, yname="class")
training <- train[,-c(11,12)]
testing <- data_test[,-c(11)]
training
testing
train
ctrl_fast <- trainControl(method="cv", 
                     repeats=2,
                     number=10, 
                     summaryFunction=twoClassSummary,
                     verboseIter=T,
                     classProbs=TRUE,
                     allowParallel = TRUE)  
ctrl <- trainControl(method="repeatedcv",repeats = 3) #,classProbs=TRUE,summaryFunction = twoClassSummary)

Random Forest Classificator

  # Random Forest
rfFit <- train(class ~ sp+wp+wnp+snp+ds+dm+dl+ss+sm+sl,
               data = training,
               metric="ROC",
               method = "rf",
               trControl = ctrl_fast)
Aggregating results
Selecting tuning parameters
Fitting mtry = 2 on full training set
rfFit
Random Forest 

10256 samples
   10 predictors
    2 classes: 'Botnet', 'Normal' 

No pre-processing
Resampling: Cross-Validated (10 fold) 
Summary of sample sizes: 9231, 9231, 9230, 9231, 9230, 9231, ... 
Resampling results across tuning parameters:

  mtry  ROC        Sens       Spec     
   2    0.9760942  0.9204366  0.9680167
   6    0.9750400  0.9253103  0.9658713
  10    0.9746732  0.9233598  0.9647010

ROC was used to select the optimal model using  the largest value.
The final value used for the model was mtry = 2. 
rfFit$finalModel

Call:
 randomForest(x = x, y = y, mtry = param$mtry) 
               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 2

        OOB estimate of  error rate: 5.39%
Confusion matrix:
       Botnet Normal class.error
Botnet   4718    410  0.07995320
Normal    143   4985  0.02788612
predsrfprobs=predict(rfFit,testing,type='prob')
predsrf=ifelse(predsrfprobs$Botnet >=0.9,'Botnet','Normal')
confusionMatrix(predsrf,testing$class)
Confusion Matrix and Statistics

          Reference
Prediction Botnet Normal
    Botnet   1046     10
    Normal    236    559
                                          
               Accuracy : 0.8671          
                 95% CI : (0.8508, 0.8822)
    No Information Rate : 0.6926          
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.7189          
 Mcnemar's Test P-Value : < 2.2e-16       
                                          
            Sensitivity : 0.8159          
            Specificity : 0.9824          
         Pos Pred Value : 0.9905          
         Neg Pred Value : 0.7031          
             Prevalence : 0.6926          
         Detection Rate : 0.5651          
   Detection Prevalence : 0.5705          
      Balanced Accuracy : 0.8992          
                                          
       'Positive' Class : Botnet          
                                          
library(ggplot2)
library(plotROC)
selectedIndices <- rfFit$pred$mtry == 2
ggplot(cbind(predsrfprobs,class=testing$class), 
       aes(m = Botnet, d = factor(class, labels=c("Normal","Botnet"),levels = c("Normal", "Botnet")))) + 
    geom_roc(hjust = -0.4, vjust = 1.5,colour='orange') + 
  theme_bw()

cbind(predsrfprobs,class=testing$class)

KNN

#Checking distibution in origanl data and partitioned data
prop.table(table(training$class)) * 100

Botnet Normal 
    50     50 
prop.table(table(testing$class)) * 100

  Botnet   Normal 
69.25986 30.74014 
prop.table(table(feature_vectors$class)) * 100

 Botnet  Normal 
69.2449 30.7551 
trainX <- training[,names(training) != "class"]
preProcValues <- preProcess(x = trainX,method = c("center", "scale"))
preProcValues
Created from 10244 samples and 13 variables

Pre-processing:
  - centered (11)
  - ignored (2)
  - scaled (11)
knnFit <- train(class ~ sp+wp+wnp+snp+ds+dm+dl+ss+sm+sl, data = training, method = "knn", trControl = ctrl_fast, preProcess = c("center","scale"), tuneLength = 20)
The metric "Accuracy" was not in the result set. ROC will be used instead.
Aggregating results
Selecting tuning parameters
Fitting k = 15 on full training set
#Output of kNN fit
knnFit
k-Nearest Neighbors 

10256 samples
   10 predictors
    2 classes: 'Botnet', 'Normal' 

Pre-processing: centered (10), scaled (10) 
Resampling: Cross-Validated (10 fold) 
Summary of sample sizes: 9230, 9230, 9230, 9231, 9231, 9230, ... 
Resampling results across tuning parameters:

  k   ROC        Sens       Spec     
   5  0.9660665  0.8738304  0.9450079
   7  0.9679714  0.8753910  0.9432520
   9  0.9678652  0.8689567  0.9413031
  11  0.9679040  0.8670051  0.9432501
  13  0.9680515  0.8625221  0.9418856
  15  0.9680761  0.8654442  0.9416903
  17  0.9678730  0.8595954  0.9413004
  19  0.9673341  0.8603752  0.9405188
  21  0.9668209  0.8605686  0.9393492
  23  0.9661648  0.8576454  0.9381792
  25  0.9656652  0.8549156  0.9397394
  27  0.9654901  0.8508224  0.9403235
  29  0.9652638  0.8498458  0.9368151
  31  0.9647511  0.8486747  0.9356440
  33  0.9644415  0.8510154  0.9336950
  35  0.9640843  0.8477004  0.9350588
  37  0.9639755  0.8475070  0.9350599
  39  0.9636649  0.8453620  0.9348650
  41  0.9633665  0.8453616  0.9334989
  43  0.9631422  0.8451655  0.9331087

ROC was used to select the optimal model using  the largest value.
The final value used for the model was k = 15. 
#Plotting yields Number of Neighbours Vs accuracy (based on repeated cross validation)
plot(knnFit)

knnPredict <- predict(knnFit,newdata = testing )
#Get the confusion matrix to see accuracy value and other parameter values
confusionMatrix(knnPredict, testing$class )
Confusion Matrix and Statistics

          Reference
Prediction Botnet Normal
    Botnet   1121     40
    Normal    161    529
                                          
               Accuracy : 0.8914          
                 95% CI : (0.8763, 0.9052)
    No Information Rate : 0.6926          
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.7592          
 Mcnemar's Test P-Value : < 2.2e-16       
                                          
            Sensitivity : 0.8744          
            Specificity : 0.9297          
         Pos Pred Value : 0.9655          
         Neg Pred Value : 0.7667          
             Prevalence : 0.6926          
         Detection Rate : 0.6056          
   Detection Prevalence : 0.6272          
      Balanced Accuracy : 0.9021          
                                          
       'Positive' Class : Botnet          
                                          
mean(knnPredict == testing$class)
[1] 0.89141
library(pROC)
knnPredict <- predict(knnFit,newdata = testing , type="prob")
knnROC <- roc(testing$class,knnPredict[,"Botnet"], levels = c('Normal','Botnet'))#rev(testing$class))
knnROC

Call:
roc.default(response = testing$class, predictor = knnPredict[,     "Botnet"], levels = c("Normal", "Botnet"))

Data: knnPredict[, "Botnet"] in 569 controls (testing$class Normal) < 1282 cases (testing$class Botnet).
Area under the curve: 0.9644
ggplot(cbind(knnPredict,class=testing$class), 
       aes(m = Botnet, d = factor(class, labels=c("Normal","Botnet"),levels = c("Normal", "Botnet")))) + 
    geom_roc(hjust = -0.4, vjust = 1.5,colour='orange') + 
  theme_bw()

#plot(knnROC, type="S", print.thres= 0.5)

Logistic Regression

logicRFit <- train(class ~ sp+wp+wnp+snp+ds+dm+dl+ss+sm+sl, method='glm', trControl = ctrl_fast,preProcess=c('scale', 'center'), data=training, family=binomial(link='logit'))
The metric "Accuracy" was not in the result set. ROC will be used instead.prediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleadingprediction from a rank-deficient fit may be misleading
Aggregating results
Fitting final model on full training set
#logicRFit <- train(class ~ sp*wp*wnp*snp*ds*dm*dl*ss*sm*sl, method='glm', trControl = ctrl_fast,preProcess=c('scale', 'center'), data=training, family=binomial(link='logit'))
#logicRFit <- train(class ~ sp+wp+wnp+snp+ds+dm+dl+ss+sm+sl, method='glm', trControl = ctrl_fast,preProcess=c('scale', 'center'), data=training, family=binomial(link='logit'))
#summary(logicRFit)
#Output of Logistic Regression fit
logicRFit
Generalized Linear Model 

10256 samples
   10 predictors
    2 classes: 'Botnet', 'Normal' 

Pre-processing: scaled (10), centered (10) 
Resampling: Cross-Validated (10 fold) 
Summary of sample sizes: 9230, 9230, 9232, 9230, 9231, 9230, ... 
Resampling results:

  ROC        Sens       Spec     
  0.9401934  0.8373648  0.9167341

 
logicRPredict <- predict(logicRFit, newdata = testing )
prediction from a rank-deficient fit may be misleading
confusionMatrix(logicRPredict, testing$class)
Confusion Matrix and Statistics

          Reference
Prediction Botnet Normal
    Botnet   1083     45
    Normal    199    524
                                          
               Accuracy : 0.8682          
                 95% CI : (0.8519, 0.8833)
    No Information Rate : 0.6926          
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.7121          
 Mcnemar's Test P-Value : < 2.2e-16       
                                          
            Sensitivity : 0.8448          
            Specificity : 0.9209          
         Pos Pred Value : 0.9601          
         Neg Pred Value : 0.7248          
             Prevalence : 0.6926          
         Detection Rate : 0.5851          
   Detection Prevalence : 0.6094          
      Balanced Accuracy : 0.8828          
                                          
       'Positive' Class : Botnet          
                                          
logicRPredict <- predict(logicRFit, newdata = testing, type="prob")
prediction from a rank-deficient fit may be misleading
logicROC <- roc(testing$class,logicRPredict[,"Botnet"], levels = c('Normal','Botnet'))#rev(testing$class))
ggplot(cbind(logicRPredict,class=testing$class), 
       aes(m = Botnet, d = factor(class, labels=c("Normal","Botnet"),levels = c("Normal", "Botnet")))) + 
    geom_roc(hjust = -0.4, vjust = 1.5,colour='orange') + 
  theme_bw()

#logicROC

Naive Bayes

naiveBayesFit <- train(class ~ sp+wp+wnp+snp+ds+dm+dl+ss+sm+sl, method='nb', trControl = ctrl_fast,preProcess=c('scale', 'center'), data=training)
The metric "Accuracy" was not in the result set. ROC will be used instead.Numerical 0 probability for all classes with observation 13Numerical 0 probability for all classes with observation 3Numerical 0 probability for all classes with observation 24Numerical 0 probability for all classes with observation 55Numerical 0 probability for all classes with observation 86Numerical 0 probability for all classes with observation 101Numerical 0 probability for all classes with observation 120Numerical 0 probability for all classes with observation 129Numerical 0 probability for all classes with observation 130Numerical 0 probability for all classes with observation 134Numerical 0 probability for all classes with observation 137Numerical 0 probability for all classes with observation 80Numerical 0 probability for all classes with observation 155Numerical 0 probability for all classes with observation 181Numerical 0 probability for all classes with observation 125Numerical 0 probability for all classes with observation 139Numerical 0 probability for all classes with observation 219Numerical 0 probability for all classes with observation 142Numerical 0 probability for all classes with observation 160Numerical 0 probability for all classes with observation 253Numerical 0 probability for all classes with observation 274Numerical 0 probability for all classes with observation 283Numerical 0 probability for all classes with observation 208Numerical 0 probability for all classes with observation 217Numerical 0 probability for all classes with observation 221Numerical 0 probability for all classes with observation 228Numerical 0 probability for all classes with observation 230Numerical 0 probability for all classes with observation 348Numerical 0 probability for all classes with observation 349Numerical 0 probability for all classes with observation 354Numerical 0 probability for all classes with observation 355Numerical 0 probability for all classes with observation 261Numerical 0 probability for all classes with observation 378Numerical 0 probability for all classes with observation 379Numerical 0 probability for all classes with observation 265Numerical 0 probability for all classes with observation 278Numerical 0 probability for all classes with observation 396Numerical 0 probability for all classes with observation 291Numerical 0 probability for all classes with observation 406Numerical 0 probability for all classes with observation 295Numerical 0 probability for all classes with observation 411Numerical 0 probability for all classes with observation 420Numerical 0 probability for all classes with observation 308Numerical 0 probability for all classes with observation 422Numerical 0 probability for all classes with observation 437Numerical 0 probability for all classes with observation 330Numerical 0 probability for all classes with observation 348Numerical 0 probability for all classes with observation 465Numerical 0 probability for all classes with observation 367Numerical 0 probability for all classes with observation 374Numerical 0 probability for all classes with observation 489Numerical 0 probability for all classes with observation 494Numerical 0 probability for all classes with observation 381Numerical 0 probability for all classes with observation 529Numerical 0 probability for all classes with observation 399Numerical 0 probability for all classes with observation 531Numerical 0 probability for all classes with observation 410Numerical 0 probability for all classes with observation 545Numerical 0 probability for all classes with observation 546Numerical 0 probability for all classes with observation 547Numerical 0 probability for all classes with observation 431Numerical 0 probability for all classes with observation 551Numerical 0 probability for all classes with observation 442Numerical 0 probability for all classes with observation 573Numerical 0 probability for all classes with observation 575Numerical 0 probability for all classes with observation 576Numerical 0 probability for all classes with observation 577Numerical 0 probability for all classes with observation 578Numerical 0 probability for all classes with observation 460Numerical 0 probability for all classes with observation 462Numerical 0 probability for all classes with observation 617Numerical 0 probability for all classes with observation 471Numerical 0 probability for all classes with observation 635Numerical 0 probability for all classes with observation 638Numerical 0 probability for all classes with observation 643Numerical 0 probability for all classes with observation 493Numerical 0 probability for all classes with observation 657Numerical 0 probability for all classes with observation 658Numerical 0 probability for all classes with observation 673Numerical 0 probability for all classes with observation 511Numerical 0 probability for all classes with observation 513Numerical 0 probability for all classes with observation 696Numerical 0 probability for all classes with observation 697Numerical 0 probability for all classes with observation 534Numerical 0 probability for all classes with observation 707Numerical 0 probability for all classes with observation 538Numerical 0 probability for all classes with observation 721Numerical 0 probability for all classes with observation 743Numerical 0 probability for all classes with observation 546Numerical 0 probability for all classes with observation 547Numerical 0 probability for all classes with observation 553Numerical 0 probability for all classes with observation 784Numerical 0 probability for all classes with observation 787Numerical 0 probability for all classes with observation 791Numerical 0 probability for all classes with observation 576Numerical 0 probability for all classes with observation 802Numerical 0 probability for all classes with observation 805Numerical 0 probability for all classes with observation 806Numerical 0 probability for all classes with observation 810Numerical 0 probability for all classes with observation 596Numerical 0 probability for all classes with observation 830Numerical 0 probability for all classes with observation 834Numerical 0 probability for all classes with observation 267Numerical 0 probability for all classes with observation 836Numerical 0 probability for all classes with observation 621Numerical 0 probability for all classes with observation 627Numerical 0 probability for all classes with observation 634Numerical 0 probability for all classes with observation 643Numerical 0 probability for all classes with observation 876Numerical 0 probability for all classes with observation 883Numerical 0 probability for all classes with observation 651Numerical 0 probability for all classes with observation 884Numerical 0 probability for all classes with observation 659Numerical 0 probability for all classes with observation 669Numerical 0 probability for all classes with observation 915Numerical 0 probability for all classes with observation 924Numerical 0 probability for all classes with observation 686Numerical 0 probability for all classes with observation 927Numerical 0 probability for all classes with observation 691Numerical 0 probability for all classes with observation 693Numerical 0 probability for all classes with observation 702Numerical 0 probability for all classes with observation 954Numerical 0 probability for all classes with observation 956Numerical 0 probability for all classes with observation 960Numerical 0 probability for all classes with observation 721Numerical 0 probability for all classes with observation 727Numerical 0 probability for all classes with observation 984Numerical 0 probability for all classes with observation 987Numerical 0 probability for all classes with observation 737Numerical 0 probability for all classes with observation 994Numerical 0 probability for all classes with observation 1003Numerical 0 probability for all classes with observation 1005Numerical 0 probability for all classes with observation 1010Numerical 0 probability for all classes with observation 759Numerical 0 probability for all classes with observation 1015Numerical 0 probability for all classes with observation 763Numerical 0 probability for all classes with observation 765Numerical 0 probability for all classes with observation 769Numerical 0 probability for all classes with observation 787Numerical 0 probability for all classes with observation 789Numerical 0 probability for all classes with observation 799Numerical 0 probability for all classes with observation 811Numerical 0 probability for all classes with observation 13Numerical 0 probability for all classes with observation 829Numerical 0 probability for all classes with observation 833Numerical 0 probability for all classes with observation 55Numerical 0 probability for all classes with observation 872Numerical 0 probability for all classes with observation 880Numerical 0 probability for all classes with observation 86Numerical 0 probability for all classes with observation 101Numerical 0 probability for all classes with observation 898Numerical 0 probability for all classes with observation 902Numerical 0 probability for all classes with observation 120Numerical 0 probability for all classes with observation 917Numerical 0 probability for all classes with observation 129Numerical 0 probability for all classes with observation 130Numerical 0 probability for all classes with observation 134Numerical 0 probability for all classes with observation 925Numerical 0 probability for all classes with observation 137Numerical 0 probability for all classes with observation 927Numerical 0 probability for all classes with observation 938Numerical 0 probability for all classes with observation 155Numerical 0 probability for all classes with observation 949Numerical 0 probability for all classes with observation 181Numerical 0 probability for all classes with observation 965Numerical 0 probability for all classes with observation 219Numerical 0 probability for all classes with observation 989Numerical 0 probability for all classes with observation 993Numerical 0 probability for all classes with observation 1003Numerical 0 probability for all classes with observation 1008Numerical 0 probability for all classes with observation 253Numerical 0 probability for all classes with observation 1018Numerical 0 probability for all classes with observation 274Numerical 0 probability for all classes with observation 283Numerical 0 probability for all classes with observation 348Numerical 0 probability for all classes with observation 349Numerical 0 probability for all classes with observation 3Numerical 0 probability for all classes with observation 354Numerical 0 probability for all classes with observation 355Numerical 0 probability for all classes with observation 24Numerical 0 probability for all classes with observation 378Numerical 0 probability for all classes with observation 379Numerical 0 probability for all classes with observation 396Numerical 0 probability for all classes with observation 406Numerical 0 probability for all classes with observation 411Numerical 0 probability for all classes with observation 420Numerical 0 probability for all classes with observation 422Numerical 0 probability for all classes with observation 437Numerical 0 probability for all classes with observation 80Numerical 0 probability for all classes with observation 125Numerical 0 probability for all classes with observation 465Numerical 0 probability for all classes with observation 139Numerical 0 probability for all classes with observation 142Numerical 0 probability for all classes with observation 489Numerical 0 probability for all classes with observation 494Numerical 0 probability for all classes with observation 160Numerical 0 probability for all classes with observation 529Numerical 0 probability for all classes with observation 531Numerical 0 probability for all classes with observation 545Numerical 0 probability for all classes with observation 546Numerical 0 probability for all classes with observation 547Numerical 0 probability for all classes with observation 551Numerical 0 probability for all classes with observation 208Numerical 0 probability for all classes with observation 217Numerical 0 probability for all classes with observation 573Numerical 0 probability for all classes with observation 575Numerical 0 probability for all classes with observation 221Numerical 0 probability for all classes with observation 576Numerical 0 probability for all classes with observation 577Numerical 0 probability for all classes with observation 578Numerical 0 probability for all classes with observation 228Numerical 0 probability for all classes with observation 230Numerical 0 probability for all classes with observation 617Numerical 0 probability for all classes with observation 261Numerical 0 probability for all classes with observation 265Numerical 0 probability for all classes with observation 635Numerical 0 probability for all classes with observation 638Numerical 0 probability for all classes with observation 643Numerical 0 probability for all classes with observation 278Numerical 0 probability for all classes with observation 657Numerical 0 probability for all classes with observation 658Numerical 0 probability for all classes with observation 291Numerical 0 probability for all classes with observation 295Numerical 0 probability for all classes with observation 673Numerical 0 probability for all classes with observation 308Numerical 0 probability for all classes with observation 696Numerical 0 probability for all classes with observation 697Numerical 0 probability for all classes with observation 707Numerical 0 probability for all classes with observation 330Numerical 0 probability for all classes with observation 546Numerical 0 probability for all classes with observation 721Numerical 0 probability for all classes with observation 348Numerical 0 probability for all classes with observation 743Numerical 0 probability for all classes with observation 367Numerical 0 probability for all classes with observation 374Numerical 0 probability for all classes with observation 381Numerical 0 probability for all classes with observation 784Numerical 0 probability for all classes with observation 787Numerical 0 probability for all classes with observation 791Numerical 0 probability for all classes with observation 399Numerical 0 probability for all classes with observation 802Numerical 0 probability for all classes with observation 805Numerical 0 probability for all classes with observation 806Numerical 0 probability for all classes with observation 410Numerical 0 probability for all classes with observation 810Numerical 0 probability for all classes with observation 830Numerical 0 probability for all classes with observation 431Numerical 0 probability for all classes with observation 834Numerical 0 probability for all classes with observation 836Numerical 0 probability for all classes with observation 442Numerical 0 probability for all classes with observation 876Numerical 0 probability for all classes with observation 883Numerical 0 probability for all classes with observation 884Numerical 0 probability for all classes with observation 460Numerical 0 probability for all classes with observation 462Numerical 0 probability for all classes with observation 915Numerical 0 probability for all classes with observation 471Numerical 0 probability for all classes with observation 924Numerical 0 probability for all classes with observation 927Numerical 0 probability for all classes with observation 493Numerical 0 probability for all classes with observation 511Numerical 0 probability for all classes with observation 513Numerical 0 probability for all classes with observation 954Numerical 0 probability for all classes with observation 956Numerical 0 probability for all classes with observation 960Numerical 0 probability for all classes with observation 534Numerical 0 probability for all classes with observation 538Numerical 0 probability for all classes with observation 546Numerical 0 probability for all classes with observation 547Numerical 0 probability for all classes with observation 984Numerical 0 probability for all classes with observation 987Numerical 0 probability for all classes with observation 553Numerical 0 probability for all classes with observation 994Numerical 0 probability for all classes with observation 1003Numerical 0 probability for all classes with observation 1005Numerical 0 probability for all classes with observation 1010Numerical 0 probability for all classes with observation 576Numerical 0 probability for all classes with observation 1015Numerical 0 probability for all classes with observation 596Numerical 0 probability for all classes with observation 621Numerical 0 probability for all classes with observation 627Numerical 0 probability for all classes with observation 634Numerical 0 probability for all classes with observation 643Numerical 0 probability for all classes with observation 651Numerical 0 probability for all classes with observation 659Numerical 0 probability for all classes with observation 669Numerical 0 probability for all classes with observation 508Numerical 0 probability for all classes with observation 686Numerical 0 probability for all classes with observation 691Numerical 0 probability for all classes with observation 693Numerical 0 probability for all classes with observation 702Numerical 0 probability for all classes with observation 721Numerical 0 probability for all classes with observation 727Numerical 0 probability for all classes with observation 737Numerical 0 probability for all classes with observation 759Numerical 0 probability for all classes with observation 763Numerical 0 probability for all classes with observation 34Numerical 0 probability for all classes with observation 765Numerical 0 probability for all classes with observation 769Numerical 0 probability for all classes with observation 42Numerical 0 probability for all classes with observation 46Numerical 0 probability for all classes with observation 787Numerical 0 probability for all classes with observation 789Numerical 0 probability for all classes with observation 799Numerical 0 probability for all classes with observation 811Numerical 0 probability for all classes with observation 98Numerical 0 probability for all classes with observation 829Numerical 0 probability for all classes with observation 124Numerical 0 probability for all classes with observation 833Numerical 0 probability for all classes with observation 135Numerical 0 probability for all classes with observation 872Numerical 0 probability for all classes with observation 176Numerical 0 probability for all classes with observation 880Numerical 0 probability for all classes with observation 192Numerical 0 probability for all classes with observation 898Numerical 0 probability for all classes with observation 902Numerical 0 probability for all classes with observation 572Numerical 0 probability for all classes with observation 232Numerical 0 probability for all classes with observation 917Numerical 0 probability for all classes with observation 234Numerical 0 probability for all classes with observation 925Numerical 0 probability for all classes with observation 927Numerical 0 probability for all classes with observation 258Numerical 0 probability for all classes with observation 938Numerical 0 probability for all classes with observation 295Numerical 0 probability for all classes with observation 296Numerical 0 probability for all classes with observation 298Numerical 0 probability for all classes with observation 300Numerical 0 probability for all classes with observation 949Numerical 0 probability for all classes with observation 306Numerical 0 probability for all classes with observation 965Numerical 0 probability for all classes with observation 324Numerical 0 probability for all classes with observation 989Numerical 0 probability for all classes with observation 993Numerical 0 probability for all classes with observation 1003Numerical 0 probability for all classes with observation 1008Numerical 0 probability for all classes with observation 359Numerical 0 probability for all classes with observation 1018Numerical 0 probability for all classes with observation 369Numerical 0 probability for all classes with observation 375Numerical 0 probability for all classes with observation 380Numerical 0 probability for all classes with observation 390Numerical 0 probability for all classes with observation 404Numerical 0 probability for all classes with observation 425Numerical 0 probability for all classes with observation 483Numerical 0 probability for all classes with observation 487Numerical 0 probability for all classes with observation 508Numerical 0 probability for all classes with observation 513Numerical 0 probability for all classes with observation 546Numerical 0 probability for all classes with observation 550Numerical 0 probability for all classes with observation 603Numerical 0 probability for all classes with observation 613Numerical 0 probability for all classes with observation 619Numerical 0 probability for all classes with observation 630Numerical 0 probability for all classes with observation 632Numerical 0 probability for all classes with observation 639Numerical 0 probability for all classes with observation 643Numerical 0 probability for all classes with observation 32Numerical 0 probability for all classes with observation 658Numerical 0 probability for all classes with observation 44Numerical 0 probability for all classes with observation 47Numerical 0 probability for all classes with observation 50Numerical 0 probability for all classes with observation 68Numerical 0 probability for all classes with observation 707Numerical 0 probability for all classes with observation 711Numerical 0 probability for all classes with observation 747Numerical 0 probability for all classes with observation 750Numerical 0 probability for all classes with observation 116Numerical 0 probability for all classes with observation 759Numerical 0 probability for all classes with observation 118Numerical 0 probability for all classes with observation 760Numerical 0 probability for all classes with observation 768Numerical 0 probability for all classes with observation 132Numerical 0 probability for all classes with observation 150Numerical 0 probability for all classes with observation 803Numerical 0 probability for all classes with observation 839Numerical 0 probability for all classes with observation 869Numerical 0 probability for all classes with observation 883Numerical 0 probability for all classes with observation 253Numerical 0 probability for all classes with observation 254Numerical 0 probability for all classes with observation 256Numerical 0 probability for all classes with observation 902Numerical 0 probability for all classes with observation 268Numerical 0 probability for all classes with observation 923Numerical 0 probability for all classes with observation 927Numerical 0 probability for all classes with observation 932Numerical 0 probability for all classes with observation 287Numerical 0 probability for all classes with observation 936Numerical 0 probability for all classes with observation 292Numerical 0 probability for all classes with observation 962Numerical 0 probability for all classes with observation 980Numerical 0 probability for all classes with observation 331Numerical 0 probability for all classes with observation 333Numerical 0 probability for all classes with observation 1007Numerical 0 probability for all classes with observation 346Numerical 0 probability for all classes with observation 360Numerical 0 probability for all classes with observation 368Numerical 0 probability for all classes with observation 373Numerical 0 probability for all classes with observation 34Numerical 0 probability for all classes with observation 42Numerical 0 probability for all classes with observation 46Numerical 0 probability for all classes with observation 98Numerical 0 probability for all classes with observation 124Numerical 0 probability for all classes with observation 467Numerical 0 probability for all classes with observation 471Numerical 0 probability for all classes with observation 472Numerical 0 probability for all classes with observation 135Numerical 0 probability for all classes with observation 481Numerical 0 probability for all classes with observation 176Numerical 0 probability for all classes with observation 512Numerical 0 probability for all classes with observation 192Numerical 0 probability for all classes with observation 524Numerical 0 probability for all classes with observation 532Numerical 0 probability for all classes with observation 546Numerical 0 probability for all classes with observation 232Numerical 0 probability for all classes with observation 234Numerical 0 probability for all classes with observation 554Numerical 0 probability for all classes with observation 559Numerical 0 probability for all classes with observation 560Numerical 0 probability for all classes with observation 583Numerical 0 probability for all classes with observation 586Numerical 0 probability for all classes with observation 258Numerical 0 probability for all classes with observation 295Numerical 0 probability for all classes with observation 296Numerical 0 probability for all classes with observation 298Numerical 0 probability for all classes with observation 300Numerical 0 probability for all classes with observation 630Numerical 0 probability for all classes with observation 306Numerical 0 probability for all classes with observation 324Numerical 0 probability for all classes with observation 659Numerical 0 probability for all classes with observation 660Numerical 0 probability for all classes with observation 672Numerical 0 probability for all classes with observation 359Numerical 0 probability for all classes with observation 369Numerical 0 probability for all classes with observation 684Numerical 0 probability for all classes with observation 375Numerical 0 probability for all classes with observation 380Numerical 0 probability for all classes with observation 390Numerical 0 probability for all classes with observation 713Numerical 0 probability for all classes with observation 404Numerical 0 probability for all classes with observation 716Numerical 0 probability for all classes with observation 425Numerical 0 probability for all classes with observation 740Numerical 0 probability for all classes with observation 775Numerical 0 probability for all classes with observation 783Numerical 0 probability for all classes with observation 786Numerical 0 probability for all classes with observation 787Numerical 0 probability for all classes with observation 483Numerical 0 probability for all classes with observation 487Numerical 0 probability for all classes with observation 794Numerical 0 probability for all classes with observation 803Numerical 0 probability for all classes with observation 508Numerical 0 probability for all classes with observation 513Numerical 0 probability for all classes with observation 546Numerical 0 probability for all classes with observation 550Numerical 0 probability for all classes with observation 847Numerical 0 probability for all classes with observation 868Numerical 0 probability for all classes with observation 603Numerical 0 probability for all classes with observation 874Numerical 0 probability for all classes with observation 613Numerical 0 probability for all classes with observation 883Numerical 0 probability for all classes with observation 888Numerical 0 probability for all classes with observation 619Numerical 0 probability for all classes with observation 630Numerical 0 probability for all classes with observation 902Numerical 0 probability for all classes with observation 632Numerical 0 probability for all classes with observation 905Numerical 0 probability for all classes with observation 639Numerical 0 probability for all classes with observation 912Numerical 0 probability for all classes with observation 643Numerical 0 probability for all classes with observation 927Numerical 0 probability for all classes with observation 658Numerical 0 probability for all classes with observation 952Numerical 0 probability for all classes with observation 968Numerical 0 probability for all classes with observation 977Numerical 0 probability for all classes with observation 707Numerical 0 probability for all classes with observation 711Numerical 0 probability for all classes with observation 994Numerical 0 probability for all classes with observation 1024Numerical 0 probability for all classes with observation 747Numerical 0 probability for all classes with observation 750Numerical 0 probability for all classes with observation 759Numerical 0 probability for all classes with observation 760Numerical 0 probability for all classes with observation 32Numerical 0 probability for all classes with observation 768Numerical 0 probability for all classes with observation 44Numerical 0 probability for all classes with observation 47Numerical 0 probability for all classes with observation 50Numerical 0 probability for all classes with observation 68Numerical 0 probability for all classes with observation 803Numerical 0 probability for all classes with observation 116Numerical 0 probability for all classes with observation 118Numerical 0 probability for all classes with observation 839Numerical 0 probability for all classes with observation 132Numerical 0 probability for all classes with observation 150Numerical 0 probability for all classes with observation 869Numerical 0 probability for all classes with observation 883Numerical 0 probability for all classes with observation 902Numerical 0 probability for all classes with observation 923Numerical 0 probability for all classes with observation 267Numerical 0 probability for all classes with observation 927Numerical 0 probability for all classes with observation 932Numerical 0 probability for all classes with observation 936Numerical 0 probability for all classes with observation 962Numerical 0 probability for all classes with observation 253Numerical 0 probability for all classes with observation 254Numerical 0 probability for all classes with observation 256Numerical 0 probability for all classes with observation 268Numerical 0 probability for all classes with observation 980Numerical 0 probability for all classes with observation 287Numerical 0 probability for all classes with observation 292Numerical 0 probability for all classes with observation 1007Numerical 0 probability for all classes with observation 331Numerical 0 probability for all classes with observation 333Numerical 0 probability for all classes with observation 346Numerical 0 probability for all classes with observation 360Numerical 0 probability for all classes with observation 368Numerical 0 probability for all classes with observation 373Numerical 0 probability for all classes with observation 467Numerical 0 probability for all classes with observation 471Numerical 0 probability for all classes with observation 472Numerical 0 probability for all classes with observation 481Numerical 0 probability for all classes with observation 512Numerical 0 probability for all classes with observation 524Numerical 0 probability for all classes with observation 532Numerical 0 probability for all classes with observation 546Numerical 0 probability for all classes with observation 554Numerical 0 probability for all classes with observation 6Numerical 0 probability for all classes with observation 559Numerical 0 probability for all classes with observation 560Numerical 0 probability for all classes with observation 21Numerical 0 probability for all classes with observation 583Numerical 0 probability for all classes with observation 586Numerical 0 probability for all classes with observation 38Numerical 0 probability for all classes with observation 42Numerical 0 probability for all classes with observation 630Numerical 0 probability for all classes with observation 78Numerical 0 probability for all classes with observation 79Numerical 0 probability for all classes with observation 659Numerical 0 probability for all classes with observation 660Numerical 0 probability for all classes with observation 96Numerical 0 probability for all classes with observation 672Numerical 0 probability for all classes with observation 684Numerical 0 probability for all classes with observation 713Numerical 0 probability for all classes with observation 716Numerical 0 probability for all classes with observation 116Numerical 0 probability for all classes with observation 118Numerical 0 probability for all classes with observation 119Numerical 0 probability for all classes with observation 129Numerical 0 probability for all classes with observation 142Numerical 0 probability for all classes with observation 740Numerical 0 probability for all classes with observation 152Numerical 0 probability for all classes with observation 159Numerical 0 probability for all classes with observation 775Numerical 0 probability for all classes with observation 783Numerical 0 probability for all classes with observation 786Numerical 0 probability for all classes with observation 787Numerical 0 probability for all classes with observation 191Numerical 0 probability for all classes with observation 194Numerical 0 probability for all classes with observation 794Numerical 0 probability for all classes with observation 803Numerical 0 probability for all classes with observation 218Numerical 0 probability for all classes with observation 234Numerical 0 probability for all classes with observation 235Numerical 0 probability for all classes with observation 847Numerical 0 probability for all classes with observation 868Numerical 0 probability for all classes with observation 874Numerical 0 probability for all classes with observation 261Numerical 0 probability for all classes with observation 883Numerical 0 probability for all classes with observation 270Numerical 0 probability for all classes with observation 888Numerical 0 probability for all classes with observation 902Numerical 0 probability for all classes with observation 905Numerical 0 probability for all classes with observation 912Numerical 0 probability for all classes with observation 294Numerical 0 probability for all classes with observation 927Numerical 0 probability for all classes with observation 952Numerical 0 probability for all classes with observation 968Numerical 0 probability for all classes with observation 345Numerical 0 probability for all classes with observation 977Numerical 0 probability for all classes with observation 351Numerical 0 probability for all classes with observation 355Numerical 0 probability for all classes with observation 994Numerical 0 probability for all classes with observation 361Numerical 0 probability for all classes with observation 363Numerical 0 probability for all classes with observation 1024Numerical 0 probability for all classes with observation 424Numerical 0 probability for all classes with observation 449Numerical 0 probability for all classes with observation 450Numerical 0 probability for all classes with observation 470Numerical 0 probability for all classes with observation 471Numerical 0 probability for all classes with observation 472Numerical 0 probability for all classes with observation 485Numerical 0 probability for all classes with observation 502Numerical 0 probability for all classes with observation 503Numerical 0 probability for all classes with observation 546Numerical 0 probability for all classes with observation 7Numerical 0 probability for all classes with observation 538Numerical 0 probability for all classes with observation 549Numerical 0 probability for all classes with observation 32Numerical 0 probability for all classes with observation 560Numerical 0 probability for all classes with observation 567Numerical 0 probability for all classes with observation 62Numerical 0 probability for all classes with observation 65Numerical 0 probability for all classes with observation 70Numerical 0 probability for all classes with observation 583Numerical 0 probability for all classes with observation 584Numerical 0 probability for all classes with observation 85Numerical 0 probability for all classes with observation 97Numerical 0 probability for all classes with observation 106Numerical 0 probability for all classes with observation 595Numerical 0 probability for all classes with observation 117Numerical 0 probability for all classes with observation 621Numerical 0 probability for all classes with observation 124Numerical 0 probability for all classes with observation 625Numerical 0 probability for all classes with observation 626Numerical 0 probability for all classes with observation 628Numerical 0 probability for all classes with observation 629Numerical 0 probability for all classes with observation 641Numerical 0 probability for all classes with observation 643Numerical 0 probability for all classes with observation 154Numerical 0 probability for all classes with observation 160Numerical 0 probability for all classes with observation 657Numerical 0 probability for all classes with observation 660Numerical 0 probability for all classes with observation 197Numerical 0 probability for all classes with observation 199Numerical 0 probability for all classes with observation 200Numerical 0 probability for all classes with observation 229Numerical 0 probability for all classes with observation 237Numerical 0 probability for all classes with observation 244Numerical 0 probability for all classes with observation 722Numerical 0 probability for all classes with observation 745Numerical 0 probability for all classes with observation 293Numerical 0 probability for all classes with observation 765Numerical 0 probability for all classes with observation 306Numerical 0 probability for all classes with observation 781Numerical 0 probability for all classes with observation 325Numerical 0 probability for all classes with observation 344Numerical 0 probability for all classes with observation 807Numerical 0 probability for all classes with observation 358Numerical 0 probability for all classes with observation 359Numerical 0 probability for all classes with observation 826Numerical 0 probability for all classes with observation 846Numerical 0 probability for all classes with observation 848Numerical 0 probability for all classes with observation 409Numerical 0 probability for all classes with observation 852Numerical 0 probability for all classes with observation 855Numerical 0 probability for all classes with observation 426Numerical 0 probability for all classes with observation 862Numerical 0 probability for all classes with observation 882Numerical 0 probability for all classes with observation 888Numerical 0 probability for all classes with observation 892Numerical 0 probability for all classes with observation 893Numerical 0 probability for all classes with observation 479Numerical 0 probability for all classes with observation 489Numerical 0 probability for all classes with observation 492Numerical 0 probability for all classes with observation 494Numerical 0 probability for all classes with observation 500Numerical 0 probability for all classes with observation 926Numerical 0 probability for all classes with observation 936Numerical 0 probability for all classes with observation 937Numerical 0 probability for all classes with observation 531Numerical 0 probability for all classes with observation 948Numerical 0 probability for all classes with observation 538Numerical 0 probability for all classes with observation 542Numerical 0 probability for all classes with observation 956Numerical 0 probability for all classes with observation 957Numerical 0 probability for all classes with observation 973Numerical 0 probability for all classes with observation 571Numerical 0 probability for all classes with observation 975Numerical 0 probability for all classes with observation 588Numerical 0 probability for all classes with observation 991Numerical 0 probability for all classes with observation 1012Numerical 0 probability for all classes with observation 1018Numerical 0 probability for all classes with observation 606Numerical 0 probability for all classes with observation 625Numerical 0 probability for all classes with observation 630Numerical 0 probability for all classes with observation 662Numerical 0 probability for all classes with observation 678Numerical 0 probability for all classes with observation 684Numerical 0 probability for all classes with observation 686Numerical 0 probability for all classes with observation 6Numerical 0 probability for all classes with observation 704Numerical 0 probability for all classes with observation 21Numerical 0 probability for all classes with observation 723Numerical 0 probability for all classes with observation 38Numerical 0 probability for all classes with observation 42Numerical 0 probability for all classes with observation 742Numerical 0 probability for all classes with observation 744Numerical 0 probability for all classes with observation 78Numerical 0 probability for all classes with observation 79Numerical 0 probability for all classes with observation 794Numerical 0 probability for all classes with observation 800Numerical 0 probability for all classes with observation 96Numerical 0 probability for all classes with observation 824Numerical 0 probability for all classes with observation 116Numerical 0 probability for all classes with observation 118Numerical 0 probability for all classes with observation 119Numerical 0 probability for all classes with observation 834Numerical 0 probability for all classes with observation 843Numerical 0 probability for all classes with observation 129Numerical 0 probability for all classes with observation 850Numerical 0 probability for all classes with observation 859Numerical 0 probability for all classes with observation 142Numerical 0 probability for all classes with observation 152Numerical 0 probability for all classes with observation 882Numerical 0 probability for all classes with observation 159Numerical 0 probability for all classes with observation 885Numerical 0 probability for all classes with observation 191Numerical 0 probability for all classes with observation 922Numerical 0 probability for all classes with observation 194Numerical 0 probability for all classes with observation 927Numerical 0 probability for all classes with observation 932Numerical 0 probability for all classes with observation 938Numerical 0 probability for all classes with observation 944Numerical 0 probability for all classes with observation 948Numerical 0 probability for all classes with observation 218Numerical 0 probability for all classes with observation 234Numerical 0 probability for all classes with observation 235Numerical 0 probability for all classes with observation 977Numerical 0 probability for all classes with observation 984Numerical 0 probability for all classes with observation 993Numerical 0 probability for all classes with observation 997Numerical 0 probability for all classes with observation 261Numerical 0 probability for all classes with observation 1009Numerical 0 probability for all classes with observation 270Numerical 0 probability for all classes with observation 294Numerical 0 probability for all classes with observation 7Numerical 0 probability for all classes with observation 345Numerical 0 probability for all classes with observation 351Numerical 0 probability for all classes with observation 355Numerical 0 probability for all classes with observation 32Numerical 0 probability for all classes with observation 361Numerical 0 probability for all classes with observation 363Numerical 0 probability for all classes with observation 62Numerical 0 probability for all classes with observation 65Numerical 0 probability for all classes with observation 70Numerical 0 probability for all classes with observation 85Numerical 0 probability for all classes with observation 97Numerical 0 probability for all classes with observation 106Numerical 0 probability for all classes with observation 424Numerical 0 probability for all classes with observation 117Numerical 0 probability for all classes with observation 124Numerical 0 probability for all classes with observation 449Numerical 0 probability for all classes with observation 450Numerical 0 probability for all classes with observation 154Numerical 0 probability for all classes with observation 160Numerical 0 probability for all classes with observation 508Numerical 0 probability for all classes with observation 470Numerical 0 probability for all classes with observation 471Numerical 0 probability for all classes with observation 472Numerical 0 probability for all classes with observation 197Numerical 0 probability for all classes with observation 199Numerical 0 probability for all classes with observation 200Numerical 0 probability for all classes with observation 485Numerical 0 probability for all classes with observation 229Numerical 0 probability for all classes with observation 237Numerical 0 probability for all classes with observation 502Numerical 0 probability for all classes with observation 503Numerical 0 probability for all classes with observation 244Numerical 0 probability for all classes with observation 538Numerical 0 probability for all classes with observation 293Numerical 0 probability for all classes with observation 549Numerical 0 probability for all classes with observation 306Numerical 0 probability for all classes with observation 560Numerical 0 probability for all classes with observation 567Numerical 0 probability for all classes with observation 325Numerical 0 probability for all classes with observation 583Numerical 0 probability for all classes with observation 344Numerical 0 probability for all classes with observation 584Numerical 0 probability for all classes with observation 358Numerical 0 probability for all classes with observation 595Numerical 0 probability for all classes with observation 359Numerical 0 probability for all classes with observation 621Numerical 0 probability for all classes with observation 625Numerical 0 probability for all classes with observation 626Numerical 0 probability for all classes with observation 628Numerical 0 probability for all classes with observation 629Numerical 0 probability for all classes with observation 409Numerical 0 probability for all classes with observation 641Numerical 0 probability for all classes with observation 643Numerical 0 probability for all classes with observation 426Numerical 0 probability for all classes with observation 572Numerical 0 probability for all classes with observation 657Numerical 0 probability for all classes with observation 660Numerical 0 probability for all classes with observation 479Numerical 0 probability for all classes with observation 489Numerical 0 probability for all classes with observation 722Numerical 0 probability for all classes with observation 492Numerical 0 probability for all classes with observation 494Numerical 0 probability for all classes with observation 500Numerical 0 probability for all classes with observation 745Numerical 0 probability for all classes with observation 531Numerical 0 probability for all classes with observation 538Numerical 0 probability for all classes with observation 542Numerical 0 probability for all classes with observation 765Numerical 0 probability for all classes with observation 781Numerical 0 probability for all classes with observation 571Numerical 0 probability for all classes with observation 588Numerical 0 probability for all classes with observation 807Numerical 0 probability for all classes with observation 606Numerical 0 probability for all classes with observation 826Numerical 0 probability for all classes with observation 625Numerical 0 probability for all classes with observation 630Numerical 0 probability for all classes with observation 846Numerical 0 probability for all classes with observation 848Numerical 0 probability for all classes with observation 852Numerical 0 probability for all classes with observation 855Numerical 0 probability for all classes with observation 662Numerical 0 probability for all classes with observation 862Numerical 0 probability for all classes with observation 678Numerical 0 probability for all classes with observation 684Numerical 0 probability for all classes with observation 686Numerical 0 probability for all classes with observation 882Numerical 0 probability for all classes with observation 888Numerical 0 probability for all classes with observation 704Numerical 0 probability for all classes with observation 892Numerical 0 probability for all classes with observation 893Numerical 0 probability for all classes with observation 723Numerical 0 probability for all classes with observation 742Numerical 0 probability for all classes with observation 744Numerical 0 probability for all classes with observation 926Numerical 0 probability for all classes with observation 936Numerical 0 probability for all classes with observation 937Numerical 0 probability for all classes with observation 948Numerical 0 probability for all classes with observation 794Numerical 0 probability for all classes with observation 800Numerical 0 probability for all classes with observation 956Numerical 0 probability for all classes with observation 957Numerical 0 probability for all classes with observation 824Numerical 0 probability for all classes with observation 834Numerical 0 probability for all classes with observation 973Numerical 0 probability for all classes with observation 843Numerical 0 probability for all classes with observation 975Numerical 0 probability for all classes with observation 850Numerical 0 probability for all classes with observation 859Numerical 0 probability for all classes with observation 991Numerical 0 probability for all classes with observation 882Numerical 0 probability for all classes with observation 885Numerical 0 probability for all classes with observation 1012Numerical 0 probability for all classes with observation 1018Numerical 0 probability for all classes with observation 922Numerical 0 probability for all classes with observation 927Numerical 0 probability for all classes with observation 932Numerical 0 probability for all classes with observation 938Numerical 0 probability for all classes with observation 944Numerical 0 probability for all classes with observation 948Numerical 0 probability for all classes with observation 977Numerical 0 probability for all classes with observation 984Numerical 0 probability for all classes with observation 993Numerical 0 probability for all classes with observation 997Numerical 0 probability for all classes with observation 1009Numerical 0 probability for all classes with observation 14Numerical 0 probability for all classes with observation 20Numerical 0 probability for all classes with observation 35Numerical 0 probability for all classes with observation 49Numerical 0 probability for all classes with observation 51Numerical 0 probability for all classes with observation 52Numerical 0 probability for all classes with observation 7Numerical 0 probability for all classes with observation 16Numerical 0 probability for all classes with observation 107Numerical 0 probability for all classes with observation 71Numerical 0 probability for all classes with observation 85Numerical 0 probability for all classes with observation 163Numerical 0 probability for all classes with observation 99Numerical 0 probability for all classes with observation 185Numerical 0 probability for all classes with observation 155Numerical 0 probability for all classes with observation 163Numerical 0 probability for all classes with observation 164Numerical 0 probability for all classes with observation 239Numerical 0 probability for all classes with observation 192Numerical 0 probability for all classes with observation 264Numerical 0 probability for all classes with observation 215Numerical 0 probability for all classes with observation 218Numerical 0 probability for all classes with observation 219Numerical 0 probability for all classes with observation 239Numerical 0 probability for all classes with observation 242Numerical 0 probability for all classes with observation 296Numerical 0 probability for all classes with observation 322Numerical 0 probability for all classes with observation 283Numerical 0 probability for all classes with observation 315Numerical 0 probability for all classes with observation 331Numerical 0 probability for all classes with observation 342Numerical 0 probability for all classes with observation 361Numerical 0 probability for all classes with observation 343Numerical 0 probability for all classes with observation 345Numerical 0 probability for all classes with observation 371Numerical 0 probability for all classes with observation 380Numerical 0 probability for all classes with observation 381Numerical 0 probability for all classes with observation 382Numerical 0 probability for all classes with observation 365Numerical 0 probability for all classes with observation 384Numerical 0 probability for all classes with observation 388Numerical 0 probability for all classes with observation 397Numerical 0 probability for all classes with observation 414Numerical 0 probability for all classes with observation 416Numerical 0 probability for all classes with observation 420Numerical 0 probability for all classes with observation 427Numerical 0 probability for all classes with observation 254Numerical 0 probability for all classes with observation 446Numerical 0 probability for all classes with observation 449Numerical 0 probability for all classes with observation 471Numerical 0 probability for all classes with observation 497Numerical 0 probability for all classes with observation 511Numerical 0 probability for all classes with observation 512Numerical 0 probability for all classes with observation 533Numerical 0 probability for all classes with observation 529Numerical 0 probability for all classes with observation 534Numerical 0 probability for all classes with observation 566Numerical 0 probability for all classes with observation 567Numerical 0 probability for all classes with observation 571Numerical 0 probability for all classes with observation 577Numerical 0 probability for all classes with observation 568Numerical 0 probability for all classes with observation 602Numerical 0 probability for all classes with observation 613Numerical 0 probability for all classes with observation 580Numerical 0 probability for all classes with observation 621Numerical 0 probability for all classes with observation 640Numerical 0 probability for all classes with observation 649Numerical 0 probability for all classes with observation 650Numerical 0 probability for all classes with observation 666Numerical 0 probability for all classes with observation 634Numerical 0 probability for all classes with observation 637Numerical 0 probability for all classes with observation 649Numerical 0 probability for all classes with observation 700Numerical 0 probability for all classes with observation 701Numerical 0 probability for all classes with observation 664Numerical 0 probability for all classes with observation 719Numerical 0 probability for all classes with observation 720Numerical 0 probability for all classes with observation 723Numerical 0 probability for all classes with observation 726Numerical 0 probability for all classes with observation 727Numerical 0 probability for all classes with observation 740Numerical 0 probability for all classes with observation 741Numerical 0 probability for all classes with observation 708Numerical 0 probability for all classes with observation 764Numerical 0 probability for all classes with observation 719Numerical 0 probability for all classes with observation 777Numerical 0 probability for all classes with observation 726Numerical 0 probability for all classes with observation 727Numerical 0 probability for all classes with observation 739Numerical 0 probability for all classes with observation 826Numerical 0 probability for all classes with observation 759Numerical 0 probability for all classes with observation 836Numerical 0 probability for all classes with observation 772Numerical 0 probability for all classes with observation 774Numerical 0 probability for all classes with observation 853Numerical 0 probability for all classes with observation 780Numerical 0 probability for all classes with observation 864Numerical 0 probability for all classes with observation 869Numerical 0 probability for all classes with observation 877Numerical 0 probability for all classes with observation 801Numerical 0 probability for all classes with observation 888Numerical 0 probability for all classes with observation 812Numerical 0 probability for all classes with observation 389Numerical 0 probability for all classes with observation 833Numerical 0 probability for all classes with observation 904Numerical 0 probability for all classes with observation 847Numerical 0 probability for all classes with observation 917Numerical 0 probability for all classes with observation 851Numerical 0 probability for all classes with observation 923Numerical 0 probability for all classes with observation 860Numerical 0 probability for all classes with observation 936Numerical 0 probability for all classes with observation 867Numerical 0 probability for all classes with observation 954Numerical 0 probability for all classes with observation 884Numerical 0 probability for all classes with observation 890Numerical 0 probability for all classes with observation 899Numerical 0 probability for all classes with observation 993Numerical 0 probability for all classes with observation 1000Numerical 0 probability for all classes with observation 1006Numerical 0 probability for all classes with observation 909Numerical 0 probability for all classes with observation 917Numerical 0 probability for all classes with observation 920Numerical 0 probability for all classes with observation 935Numerical 0 probability for all classes with observation 941Numerical 0 probability for all classes with observation 7Numerical 0 probability for all classes with observation 16Numerical 0 probability for all classes with observation 957Numerical 0 probability for all classes with observation 71Numerical 0 probability for all classes with observation 998Numerical 0 probability for all classes with observation 85Numerical 0 probability for all classes with observation 1004Numerical 0 probability for all classes with observation 1005Numerical 0 probability for all classes with observation 1011Numerical 0 probability for all classes with observation 99Numerical 0 probability for all classes with observation 1021Numerical 0 probability for all classes with observation 155Numerical 0 probability for all classes with observation 163Numerical 0 probability for all classes with observation 164Numerical 0 probability for all classes with observation 14Numerical 0 probability for all classes with observation 20Numerical 0 probability for all classes with observation 192Numerical 0 probability for all classes with observation 35Numerical 0 probability for all classes with observation 215Numerical 0 probability for all classes with observation 218Numerical 0 probability for all classes with observation 219Numerical 0 probability for all classes with observation 49Numerical 0 probability for all classes with observation 51Numerical 0 probability for all classes with observation 52Numerical 0 probability for all classes with observation 239Numerical 0 probability for all classes with observation 242Numerical 0 probability for all classes with observation 283Numerical 0 probability for all classes with observation 107Numerical 0 probability for all classes with observation 315Numerical 0 probability for all classes with observation 331Numerical 0 probability for all classes with observation 343Numerical 0 probability for all classes with observation 345Numerical 0 probability for all classes with observation 163Numerical 0 probability for all classes with observation 365Numerical 0 probability for all classes with observation 185Numerical 0 probability for all classes with observation 388Numerical 0 probability for all classes with observation 397Numerical 0 probability for all classes with observation 239Numerical 0 probability for all classes with observation 446Numerical 0 probability for all classes with observation 264Numerical 0 probability for all classes with observation 296Numerical 0 probability for all classes with observation 497Numerical 0 probability for all classes with observation 322Numerical 0 probability for all classes with observation 533Numerical 0 probability for all classes with observation 342Numerical 0 probability for all classes with observation 566Numerical 0 probability for all classes with observation 567Numerical 0 probability for all classes with observation 361Numerical 0 probability for all classes with observation 571Numerical 0 probability for all classes with observation 577Numerical 0 probability for all classes with observation 371Numerical 0 probability for all classes with observation 380Numerical 0 probability for all classes with observation 381Numerical 0 probability for all classes with observation 382Numerical 0 probability for all classes with observation 602Numerical 0 probability for all classes with observation 384Numerical 0 probability for all classes with observation 613Numerical 0 probability for all classes with observation 621Numerical 0 probability for all classes with observation 640Numerical 0 probability for all classes with observation 649Numerical 0 probability for all classes with observation 650Numerical 0 probability for all classes with observation 666Numerical 0 probability for all classes with observation 414Numerical 0 probability for all classes with observation 416Numerical 0 probability for all classes with observation 420Numerical 0 probability for all classes with observation 427Numerical 0 probability for all classes with observation 700Numerical 0 probability for all classes with observation 701Numerical 0 probability for all classes with observation 449Numerical 0 probability for all classes with observation 719Numerical 0 probability for all classes with observation 720Numerical 0 probability for all classes with observation 723Numerical 0 probability for all classes with observation 726Numerical 0 probability for all classes with observation 727Numerical 0 probability for all classes with observation 740Numerical 0 probability for all classes with observation 471Numerical 0 probability for all classes with observation 741Numerical 0 probability for all classes with observation 764Numerical 0 probability for all classes with observation 777Numerical 0 probability for all classes with observation 511Numerical 0 probability for all classes with observation 512Numerical 0 probability for all classes with observation 529Numerical 0 probability for all classes with observation 534Numerical 0 probability for all classes with observation 826Numerical 0 probability for all classes with observation 836Numerical 0 probability for all classes with observation 853Numerical 0 probability for all classes with observation 568Numerical 0 probability for all classes with observation 864Numerical 0 probability for all classes with observation 869Numerical 0 probability for all classes with observation 580Numerical 0 probability for all classes with observation 877Numerical 0 probability for all classes with observation 888Numerical 0 probability for all classes with observation 904Numerical 0 probability for all classes with observation 917Numerical 0 probability for all classes with observation 923Numerical 0 probability for all classes with observation 936Numerical 0 probability for all classes with observation 634Numerical 0 probability for all classes with observation 637Numerical 0 probability for all classes with observation 954Numerical 0 probability for all classes with observation 649Numerical 0 probability for all classes with observation 664Numerical 0 probability for all classes with observation 993Numerical 0 probability for all classes with observation 708Numerical 0 probability for all classes with observation 1000Numerical 0 probability for all classes with observation 1006Numerical 0 probability for all classes with observation 719Numerical 0 probability for all classes with observation 726Numerical 0 probability for all classes with observation 727Numerical 0 probability for all classes with observation 739Numerical 0 probability for all classes with observation 759Numerical 0 probability for all classes with observation 772Numerical 0 probability for all classes with observation 774Numerical 0 probability for all classes with observation 780Numerical 0 probability for all classes with observation 801Numerical 0 probability for all classes with observation 812Numerical 0 probability for all classes with observation 833Numerical 0 probability for all classes with observation 847Numerical 0 probability for all classes with observation 851Numerical 0 probability for all classes with observation 860Numerical 0 probability for all classes with observation 867Numerical 0 probability for all classes with observation 884Numerical 0 probability for all classes with observation 890Numerical 0 probability for all classes with observation 899Numerical 0 probability for all classes with observation 39Numerical 0 probability for all classes with observation 47Numerical 0 probability for all classes with observation 909Numerical 0 probability for all classes with observation 59Numerical 0 probability for all classes with observation 917Numerical 0 probability for all classes with observation 920Numerical 0 probability for all classes with observation 78Numerical 0 probability for all classes with observation 935Numerical 0 probability for all classes with observation 88Numerical 0 probability for all classes with observation 941Numerical 0 probability for all classes with observation 118Numerical 0 probability for all classes with observation 957Numerical 0 probability for all classes with observation 153Numerical 0 probability for all classes with observation 173Numerical 0 probability for all classes with observation 998Numerical 0 probability for all classes with observation 1004Numerical 0 probability for all classes with observation 1005Numerical 0 probability for all classes with observation 1011Numerical 0 probability for all classes with observation 1021Numerical 0 probability for all classes with observation 264Numerical 0 probability for all classes with observation 265Numerical 0 probability for all classes with observation 273Numerical 0 probability for all classes with observation 290Numerical 0 probability for all classes with observation 301Numerical 0 probability for all classes with observation 309Numerical 0 probability for all classes with observation 321Numerical 0 probability for all classes with observation 332Numerical 0 probability for all classes with observation 369Numerical 0 probability for all classes with observation 406Numerical 0 probability for all classes with observation 21Numerical 0 probability for all classes with observation 23Numerical 0 probability for all classes with observation 472Numerical 0 probability for all classes with observation 927Numerical 0 probability for all classes with observation 490Numerical 0 probability for all classes with observation 50Numerical 0 probability for all classes with observation 67Numerical 0 probability for all classes with observation 533Numerical 0 probability for all classes with observation 544Numerical 0 probability for all classes with observation 97Numerical 0 probability for all classes with observation 555Numerical 0 probability for all classes with observation 102Numerical 0 probability for all classes with observation 608Numerical 0 probability for all classes with observation 615Numerical 0 probability for all classes with observation 153Numerical 0 probability for all classes with observation 624Numerical 0 probability for all classes with observation 625Numerical 0 probability for all classes with observation 626Numerical 0 probability for all classes with observation 641Numerical 0 probability for all classes with observation 176Numerical 0 probability for all classes with observation 645Numerical 0 probability for all classes with observation 177Numerical 0 probability for all classes with observation 650Numerical 0 probability for all classes with observation 665Numerical 0 probability for all classes with observation 192Numerical 0 probability for all classes with observation 666Numerical 0 probability for all classes with observation 668Numerical 0 probability for all classes with observation 670Numerical 0 probability for all classes with observation 201Numerical 0 probability for all classes with observation 208Numerical 0 probability for all classes with observation 693Numerical 0 probability for all classes with observation 215Numerical 0 probability for all classes with observation 694Numerical 0 probability for all classes with observation 219Numerical 0 probability for all classes with observation 698Numerical 0 probability for all classes with observation 708Numerical 0 probability for all classes with observation 361Numerical 0 probability for all classes with observation 737Numerical 0 probability for all classes with observation 739Numerical 0 probability for all classes with observation 268Numerical 0 probability for all classes with observation 284Numerical 0 probability for all classes with observation 293Numerical 0 probability for all classes with observation 792Numerical 0 probability for all classes with observation 802Numerical 0 probability for all classes with observation 804Numerical 0 probability for all classes with observation 806Numerical 0 probability for all classes with observation 817Numerical 0 probability for all classes with observation 819Numerical 0 probability for all classes with observation 320Numerical 0 probability for all classes with observation 832Numerical 0 probability for all classes with observation 837Numerical 0 probability for all classes with observation 340Numerical 0 probability for all classes with observation 884Numerical 0 probability for all classes with observation 382Numerical 0 probability for all classes with observation 900Numerical 0 probability for all classes with observation 909Numerical 0 probability for all classes with observation 398Numerical 0 probability for all classes with observation 916Numerical 0 probability for all classes with observation 921Numerical 0 probability for all classes with observation 419Numerical 0 probability for all classes with observation 945Numerical 0 probability for all classes with observation 983Numerical 0 probability for all classes with observation 448Numerical 0 probability for all classes with observation 454Numerical 0 probability for all classes with observation 1004Numerical 0 probability for all classes with observation 1014Numerical 0 probability for all classes with observation 498Numerical 0 probability for all classes with observation 512Numerical 0 probability for all classes with observation 518Numerical 0 probability for all classes with observation 532Numerical 0 probability for all classes with observation 537Numerical 0 probability for all classes with observation 539Numerical 0 probability for all classes with observation 39Numerical 0 probability for all classes with observation 546Numerical 0 probability for all classes with observation 47Numerical 0 probability for all classes with observation 59Numerical 0 probability for all classes with observation 561Numerical 0 probability for all classes with observation 78Numerical 0 probability for all classes with observation 88Numerical 0 probability for all classes with observation 118Numerical 0 probability for all classes with observation 153Numerical 0 probability for all classes with observation 641Numerical 0 probability for all classes with observation 173Numerical 0 probability for all classes with observation 671Numerical 0 probability for all classes with observation 675Numerical 0 probability for all classes with observation 712Numerical 0 probability for all classes with observation 713Numerical 0 probability for all classes with observation 264Numerical 0 probability for all classes with observation 265Numerical 0 probability for all classes with observation 725Numerical 0 probability for all classes with observation 273Numerical 0 probability for all classes with observation 744Numerical 0 probability for all classes with observation 290Numerical 0 probability for all classes with observation 301Numerical 0 probability for all classes with observation 309Numerical 0 probability for all classes with observation 763Numerical 0 probability for all classes with observation 770Numerical 0 probability for all classes with observation 321Numerical 0 probability for all classes with observation 777Numerical 0 probability for all classes with observation 332Numerical 0 probability for all classes with observation 790Numerical 0 probability for all classes with observation 800Numerical 0 probability for all classes with observation 369Numerical 0 probability for all classes with observation 822Numerical 0 probability for all classes with observation 828Numerical 0 probability for all classes with observation 833Numerical 0 probability for all classes with observation 834Numerical 0 probability for all classes with observation 406Numerical 0 probability for all classes with observation 837Numerical 0 probability for all classes with observation 850Numerical 0 probability for all classes with observation 869Numerical 0 probability for all classes with observation 883Numerical 0 probability for all classes with observation 472Numerical 0 probability for all classes with observation 887Numerical 0 probability for all classes with observation 903Numerical 0 probability for all classes with observation 490Numerical 0 probability for all classes with observation 533Numerical 0 probability for all classes with observation 965Numerical 0 probability for all classes with observation 967Numerical 0 probability for all classes with observation 544Numerical 0 probability for all classes with observation 555Numerical 0 probability for all classes with observation 989Numerical 0 probability for all classes with observation 991Numerical 0 probability for all classes with observation 608Numerical 0 probability for all classes with observation 615Numerical 0 probability for all classes with observation 624Numerical 0 probability for all classes with observation 625Numerical 0 probability for all classes with observation 626Numerical 0 probability for all classes with observation 641Numerical 0 probability for all classes with observation 645Numerical 0 probability for all classes with observation 650Numerical 0 probability for all classes with observation 254Numerical 0 probability for all classes with observation 665Numerical 0 probability for all classes with observation 666Numerical 0 probability for all classes with observation 668Numerical 0 probability for all classes with observation 670Numerical 0 probability for all classes with observation 693Numerical 0 probability for all classes with observation 694Numerical 0 probability for all classes with observation 698Numerical 0 probability for all classes with observation 708Numerical 0 probability for all classes with observation 21Numerical 0 probability for all classes with observation 23Numerical 0 probability for all classes with observation 737Numerical 0 probability for all classes with observation 739Numerical 0 probability for all classes with observation 50Numerical 0 probability for all classes with observation 67Numerical 0 probability for all classes with observation 792Numerical 0 probability for all classes with observation 802Numerical 0 probability for all classes with observation 97Numerical 0 probability for all classes with observation 804Numerical 0 probability for all classes with observation 806Numerical 0 probability for all classes with observation 102Numerical 0 probability for all classes with observation 817Numerical 0 probability for all classes with observation 819Numerical 0 probability for all classes with observation 832Numerical 0 probability for all classes with observation 837Numerical 0 probability for all classes with observation 153Numerical 0 probability for all classes with observation 884Numerical 0 probability for all classes with observation 176Numerical 0 probability for all classes with observation 900Numerical 0 probability for all classes with observation 177Numerical 0 probability for all classes with observation 909Numerical 0 probability for all classes with observation 916Numerical 0 probability for all classes with observation 192Numerical 0 probability for all classes with observation 921Numerical 0 probability for all classes with observation 201Numerical 0 probability for all classes with observation 208Numerical 0 probability for all classes with observation 945Numerical 0 probability for all classes with observation 215Numerical 0 probability for all classes with observation 219Numerical 0 probability for all classes with observation 983Numerical 0 probability for all classes with observation 1004Numerical 0 probability for all classes with observation 268Numerical 0 probability for all classes with observation 1014Numerical 0 probability for all classes with observation 284Numerical 0 probability for all classes with observation 293Numerical 0 probability for all classes with observation 320Numerical 0 probability for all classes with observation 340Numerical 0 probability for all classes with observation 389Numerical 0 probability for all classes with observation 382Numerical 0 probability for all classes with observation 398Numerical 0 probability for all classes with observation 419Numerical 0 probability for all classes with observation 448Numerical 0 probability for all classes with observation 454Numerical 0 probability for all classes with observation 498Numerical 0 probability for all classes with observation 512Numerical 0 probability for all classes with observation 518Numerical 0 probability for all classes with observation 532Numerical 0 probability for all classes with observation 537Numerical 0 probability for all classes with observation 539Numerical 0 probability for all classes with observation 546Numerical 0 probability for all classes with observation 561Numerical 0 probability for all classes with observation 641Numerical 0 probability for all classes with observation 671Numerical 0 probability for all classes with observation 675Numerical 0 probability for all classes with observation 712Numerical 0 probability for all classes with observation 713Numerical 0 probability for all classes with observation 725Numerical 0 probability for all classes with observation 744Numerical 0 probability for all classes with observation 763Numerical 0 probability for all classes with observation 770Numerical 0 probability for all classes with observation 777Numerical 0 probability for all classes with observation 790Numerical 0 probability for all classes with observation 800Numerical 0 probability for all classes with observation 822Numerical 0 probability for all classes with observation 828Numerical 0 probability for all classes with observation 833Numerical 0 probability for all classes with observation 834Numerical 0 probability for all classes with observation 837Numerical 0 probability for all classes with observation 850Numerical 0 probability for all classes with observation 869Numerical 0 probability for all classes with observation 883Numerical 0 probability for all classes with observation 887Numerical 0 probability for all classes with observation 903Numerical 0 probability for all classes with observation 965Numerical 0 probability for all classes with observation 967Numerical 0 probability for all classes with observation 989Numerical 0 probability for all classes with observation 991Numerical 0 probability for all classes with observation 955Numerical 0 probability for all classes with observation 927Numerical 0 probability for all classes with observation 361Numerical 0 probability for all classes with observation 196Numerical 0 probability for all classes with observation 955Numerical 0 probability for all classes with observation 744Numerical 0 probability for all classes with observation 993Numerical 0 probability for all classes with observation 472Numerical 0 probability for all classes with observation 196Numerical 0 probability for all classes with observation 744Numerical 0 probability for all classes with observation 993Numerical 0 probability for all classes with observation 118Numerical 0 probability for all classes with observation 472Numerical 0 probability for all classes with observation 50Numerical 0 probability for all classes with observation 325Numerical 0 probability for all classes with observation 118Numerical 0 probability for all classes with observation 50Numerical 0 probability for all classes with observation 325
Aggregating results
Selecting tuning parameters
Fitting fL = 0, usekernel = TRUE, adjust = 1 on full training set
naiveBayesFit
Naive Bayes 

10256 samples
   10 predictors
    2 classes: 'Botnet', 'Normal' 

Pre-processing: scaled (10), centered (10) 
Resampling: Cross-Validated (10 fold) 
Summary of sample sizes: 9230, 9230, 9230, 9230, 9230, 9231, ... 
Resampling results across tuning parameters:

  usekernel  ROC        Sens       Spec     
  FALSE      0.9287258  0.8307368  0.8863072
   TRUE      0.9427740  0.7794503  0.9465700

Tuning parameter 'fL' was held constant at a value of 0
Tuning parameter 'adjust' was held constant at a value of 1
ROC was used to select the optimal model using  the largest value.
The final values used for the model were fL = 0, usekernel = TRUE and adjust = 1. 
naiveBayesPredict <- predict(naiveBayesFit, newdata = testing)
Numerical 0 probability for all classes with observation 96
confusionMatrix(naiveBayesPredict, testing$class)
Confusion Matrix and Statistics

          Reference
Prediction Botnet Normal
    Botnet   1022     39
    Normal    260    530
                                         
               Accuracy : 0.8385         
                 95% CI : (0.8209, 0.855)
    No Information Rate : 0.6926         
    P-Value [Acc > NIR] : < 2.2e-16      
                                         
                  Kappa : 0.6576         
 Mcnemar's Test P-Value : < 2.2e-16      
                                         
            Sensitivity : 0.7972         
            Specificity : 0.9315         
         Pos Pred Value : 0.9632         
         Neg Pred Value : 0.6709         
             Prevalence : 0.6926         
         Detection Rate : 0.5521         
   Detection Prevalence : 0.5732         
      Balanced Accuracy : 0.8643         
                                         
       'Positive' Class : Botnet         
                                         
naiveBayesPredict <- predict(naiveBayesFit, newdata = testing, type = 'prob')
Numerical 0 probability for all classes with observation 96
naiveBayesROC <- roc(testing$class,naiveBayesPredict[,"Botnet"], levels = c('Normal','Botnet'))#rev(testing$class))
naiveBayesROC

Call:
roc.default(response = testing$class, predictor = naiveBayesPredict[,     "Botnet"], levels = c("Normal", "Botnet"))

Data: naiveBayesPredict[, "Botnet"] in 569 controls (testing$class Normal) < 1282 cases (testing$class Botnet).
Area under the curve: 0.9343
ggplot(cbind(naiveBayesPredict,class=testing$class), 
       aes(m = Botnet, d = factor(class, labels=c("Normal","Botnet"),levels = c("Normal", "Botnet")))) + 
    geom_roc(hjust = -0.4, vjust = 1.5,colour='orange') + 
  theme_bw()

#plot(naiveBayesROC, type="S", print.thres= 0.5)

Suport Vector Machine

svmFit <- train(class ~ sp+wp+wnp+snp+ds+dm+dl+ss+sm+sl, method='svmLinear', trControl = ctrl_fast,preProcess=c('scale', 'center'), data=training, family=binomial(link='logit'))
The metric "Accuracy" was not in the result set. ROC will be used instead.kernlab class prediction calculations failed; returning NAskernlab class probability calculations failed; returning NAsrow names were found from a short variable and have been discardedkernlab class prediction calculations failed; returning NAskernlab class probability calculations failed; returning NAsrow names were found from a short variable and have been discardedkernlab class prediction calculations failed; returning NAskernlab class probability calculations failed; returning NAsrow names were found from a short variable and have been discardedkernlab class prediction calculations failed; returning NAskernlab class probability calculations failed; returning NAsrow names were found from a short variable and have been discardedkernlab class prediction calculations failed; returning NAskernlab class probability calculations failed; returning NAsrow names were found from a short variable and have been discardedThere were missing values in resampled performance measures.
Aggregating results
Fitting final model on full training set
svmFit
Support Vector Machines with Linear Kernel 

10256 samples
   10 predictors
    2 classes: 'Botnet', 'Normal' 

Pre-processing: scaled (10), centered (10) 
Resampling: Cross-Validated (10 fold) 
Summary of sample sizes: 9230, 9230, 9231, 9231, 9231, 9230, ... 
Resampling results:

  ROC        Sens       Spec     
  0.5920493  0.8389346  0.9063893

Tuning parameter 'C' was held constant at a value of 1
 
svmPredict <- predict(svmFit, newdata = testing)
confusionMatrix(svmPredict, testing$class)
Confusion Matrix and Statistics

          Reference
Prediction Botnet Normal
    Botnet   1087     51
    Normal    195    518
                                          
               Accuracy : 0.8671          
                 95% CI : (0.8508, 0.8822)
    No Information Rate : 0.6926          
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.7084          
 Mcnemar's Test P-Value : < 2.2e-16       
                                          
            Sensitivity : 0.8479          
            Specificity : 0.9104          
         Pos Pred Value : 0.9552          
         Neg Pred Value : 0.7265          
             Prevalence : 0.6926          
         Detection Rate : 0.5873          
   Detection Prevalence : 0.6148          
      Balanced Accuracy : 0.8791          
                                          
       'Positive' Class : Botnet          
                                          
svmPredict <- predict(svmFit, newdata = testing, type = "prob")
svmROC <- roc(testing$class,svmPredict[,"Botnet"], levels = c('Normal','Botnet'))#rev(testing$class))
svmROC

Call:
roc.default(response = testing$class, predictor = svmPredict[,     "Botnet"], levels = c("Normal", "Botnet"))

Data: svmPredict[, "Botnet"] in 569 controls (testing$class Normal) < 1282 cases (testing$class Botnet).
Area under the curve: 0.9373
ggplot(cbind(svmPredict,class=testing$class), 
       aes(m = Botnet, d = factor(class, labels=c("Normal","Botnet"),levels = c("Normal", "Botnet")))) + 
    geom_roc(hjust = -0.4, vjust = 1.5,colour='orange') + 
  theme_bw()

Comparing Models

resamps <- resamples(list(rf = rfFit, lr = logicRFit, nv = naiveBayesFit, svm = svmFit))
summary(resamps)

Call:
summary.resamples(object = resamps)

Models: rf, lr, nv, svm 
Number of resamples: 10 

ROC 
      Min. 1st Qu. Median   Mean 3rd Qu.   Max. NA's
rf  0.9692  0.9727 0.9766 0.9761  0.9786 0.9849    0
lr  0.9299  0.9364 0.9399 0.9402  0.9448 0.9477    0
nv  0.9372  0.9397 0.9426 0.9428  0.9442 0.9534    0
svm 0.2500  0.2500 0.5825 0.5920  0.9363 0.9497    0

Sens 
      Min. 1st Qu. Median   Mean 3rd Qu.   Max. NA's
rf  0.8986  0.9142 0.9162 0.9204  0.9253 0.9474    0
lr  0.7992  0.8328 0.8421 0.8374  0.8470 0.8613    0
nv  0.7661  0.7719 0.7785 0.7795  0.7836 0.7988    0
svm 0.8031  0.8187 0.8382 0.8389  0.8672 0.8674    5

Spec 
      Min. 1st Qu. Median   Mean 3rd Qu.   Max. NA's
rf  0.9571  0.9629 0.9649 0.9680  0.9722 0.9844    0
lr  0.8967  0.9069 0.9171 0.9167  0.9254 0.9376    0
nv  0.9279  0.9381 0.9483 0.9466  0.9551 0.9669    0
svm 0.8887  0.9045 0.9103 0.9064  0.9123 0.9162    5
bwplot(resamps)

diffs <- diff(resamps)
summary(diffs)

Call:
summary.diff.resamples(object = diffs)

p-value adjustment: bonferroni 
Upper diagonal: estimates of the difference
Lower diagonal: p-value for H0: difference = 0

ROC 
    rf        lr        nv        svm      
rf             0.035901  0.033320  0.384045
lr  1.615e-06           -0.002581  0.348144
nv  1.883e-07 1.00000              0.350725
svm 0.04715   0.08462   0.07869            

Sens 
    rf        lr        nv        svm      
rf             0.083072  0.140986  0.090471
lr  8.132e-06            0.057915 -0.006646
nv  5.034e-08 2.202e-05           -0.064361
svm 0.01160   1.00000   0.05475            

Spec 
    rf        lr        nv        svm      
rf             0.051283  0.021447  0.062422
lr  1.321e-05           -0.029836  0.008198
nv  0.0007621 0.0070079            0.045247
svm 0.0097445 1.0000000 0.0076966          
values=resamps$values
values
names(values)[2]<-"rfSens"
ggplot(values)+
  geom_boxplot(aes(y=rfSens,x=1))

Making probabilistic table.

# Botnet probabilistic table
botnet_prob_result = data.frame(testing$class, predsrfprobs$Botnet, knnPredict$Botnet, logicRPredict$Botnet, naiveBayesPredict$Botnet ,svmPredict$Botnet, testing$subclass, testing$port, testing$proto)
#botnet_prob_result = botnet_prob_result %>% mutate(subclass = data_test$subclass)
names(botnet_prob_result) = c('TrueClass','RamdomForest','KNN','LogisticRegression', 'NaiveBayes', 'SVM','subclass','port','proto')
botnet_prob_result
#load("./botnet_prob_results.Rda")
library(grid)
library(gridExtra)
botnet_prob_result %>% group_by(subclass) %>% summarise(n=n(),sum_RF=sum(RamdomForest),sum_KNN=sum(KNN),sum_LR=sum(LogisticRegression),sum_NB=sum(NaiveBayes),sum_SVM=sum(SVM)) %>% arrange(desc(n))
botnet_prob_result %>% group_by(subclass) %>% summarise(n=n(),mean=mean(NaiveBayes),sd=sd(NaiveBayes)) %>% arrange(desc(n))%>% top_n(10)
Selecting by sd
botnet_10_top<-botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% group_by(subclass) %>% summarise(n=n()) %>% arrange(desc(n))%>% top_n(10)
Selecting by n
botnet_10_top<-inner_join(botnet_10_top,botnet_prob_result,by="subclass")
rf_plot<-bwplot(subclass~RamdomForest,data=botnet_10_top,do.out = FALSE,scales=list(y=list(draw=FALSE)))
knn_plot<-bwplot(subclass~KNN,data=botnet_10_top,do.out = FALSE,scales=list(y=list(draw=FALSE)))
rl_plot<-bwplot(subclass~LogisticRegression,data=botnet_10_top,do.out = FALSE,scales=list(y=list(draw=FALSE)))
svm_plot<-bwplot(subclass~SVM,data=botnet_10_top,do.out = FALSE,scales=list(y=list(draw=FALSE)))
pl = list(knn_plot, rf_plot,rl_plot,svm_plot)
# do.call(grid.arrange, c(pl, nrow=1))
do.call(grid.arrange, c(lapply(pl, update), list(nrow=1)))

some heatmaps

library(scales)
knn_m<-matrix(botnet_prob_result[1:1830,]$KNN,ncol=30,nrow=61)
svm_m<-matrix(botnet_prob_result[1:1830,]$SVM,ncol=30,nrow=61)
lr_m<-matrix(botnet_prob_result[1:1830,]$LogisticRegression,ncol=30,nrow=61)
nb_m<-matrix(botnet_prob_result[1:1830,]$NaiveBayes,ncol=30,nrow=61)
rf_m<-matrix(botnet_prob_result[1:1830,]$RamdomForest,ncol=30,nrow=61)
mdf<-as.data.frame(knn_m)
mdf<-cbind(mdf,id=seq(1:61))
mdf<-reshape2::melt(mdf,id.vars=c("id"))
h1<-ggplot(mdf)+
  geom_tile(aes(x=id,y=variable,fill=value),
            colour = "white") +
  scale_fill_gradient(low = "white",
    high = "orange")+ylab("")+xlab("")+
  guides(fill=FALSE)
mdf<-as.data.frame(svm_m)
mdf<-cbind(mdf,id=seq(1:61))
mdf<-reshape2::melt(mdf,id.vars=c("id"))
h2<-ggplot(mdf)+
  geom_tile(aes(x=id,y=variable,fill=value),
            colour = "white") +
  scale_fill_gradient(low = "white",
    high = "orange")+ylab("")+xlab("")+
  guides(fill=FALSE)
mdf<-as.data.frame(rf_m)
mdf<-cbind(mdf,id=seq(1:61))
mdf<-reshape2::melt(mdf,id.vars=c("id"))
h3<-ggplot(mdf)+
  geom_tile(aes(x=id,y=variable,fill=value),
            colour = "white") +
  scale_fill_gradient(low = "white",
    high = "orange")+ylab("")+xlab("")+
  guides(fill=FALSE)
mdf<-as.data.frame(nb_m)
mdf<-cbind(mdf,id=seq(1:61))
mdf<-reshape2::melt(mdf,id.vars=c("id"))
h4<-ggplot(mdf)+
  geom_tile(aes(x=id,y=variable,fill=value),
            colour = "white") +
  scale_fill_gradient(low = "white",
    high = "orange")+ylab("")+xlab("")+
  guides(fill=FALSE)
grid.arrange(h1,h2,h3,h4,ncol=2,nrow=2)

difference heatmaps

mdf<-as.data.frame(rf_m - knn_m)
mdf<-cbind(mdf,id=seq(1:61))
mdf<-reshape2::melt(mdf,id.vars=c("id"))
mdf<-cbind(mdf,subclass=(botnet_prob_result[1:1830,]$subclass))
diff<-ggplot(mdf)+
  geom_tile(aes(x=id,y=variable,fill=value,text=subclass),
            colour = "white") +
  scale_fill_gradientn(colours=c("red","white","green"),
           values  = rescale(c(min(mdf$value), 0.05, max(mdf$value))))+
           guides(fill=FALSE)+theme_bw()  
Ignoring unknown aesthetics: text
ggplotly(diff)
We recommend that you use the dev version of ggplot2 with `ggplotly()`
Install it with: `devtools::install_github('hadley/ggplot2')`

d3heatmap(rf_m - knn_m,colors = "Blues",cellnote=matrix(botnet_prob_result[1:1830,]$subclass,ncol=30,nrow=61))

Subclass probability analisys (Attempt I)

KNN vs RF.

a=mdf %>% filter(value< -0.09) %>% group_by(subclass) %>% summarise(totless009=n()) %>% arrange(desc(totless009))
b=mdf  %>% group_by(subclass) %>% summarise(total=n()) %>% arrange(desc(total))
subclass_percent_diff<-inner_join(a,b,by="subclass") %>% mutate(percent=totless009/total) %>% arrange(desc(total)) 
subclass_percent_diff
subclass_detections<-botnet_prob_result %>% mutate(detected_rf=ifelse(RamdomForest>0.5,"Botnet","Normal"),
                              detected_knn=ifelse(KNN>0.5,"Botnet","Normal")) %>% 
                              mutate(correct_rf=ifelse(detected_rf==TrueClass,1,0))%>%
                              mutate(correct_knn=ifelse(detected_knn==TrueClass,1,0)) %>% 
  group_by(subclass) %>% summarise(total_correct_rf=sum(correct_rf),total_correct_knn=sum(correct_knn))
inner_join(subclass_detections,subclass_percent_diff,by="subclass")
mdf<-cbind(mdf,rf=botnet_prob_result$RamdomForest[1:1830],knn=botnet_prob_result$KNN[1:1830],trueclass=botnet_prob_result$TrueClass[1:1830])
botnet_prob_result
mdf %>% filter(value< -0.09) %>% filter(trueclass=="Botnet")
mdf %>% filter(value> 0.09) %>% filter(trueclass=="Normal")

Subclass probability analisys (Attempt II)

Random Forest vs. world

botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% group_by(subclass) %>% summarise(n=n(),sum_RF=sum(RamdomForest),sum_KNN=sum(KNN),sum_LR=sum(LogisticRegression),sum_NB=sum(NaiveBayes),sum_SVM=sum(SVM)) %>% arrange(desc(n))
subclass = botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% group_by(subclass) %>% summarise(n = n()) %>% arrange(desc(n))
sc1 = botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% filter(RamdomForest < KNN) %>% group_by(subclass) %>% summarise(best_knn = n())
sc2 = botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% filter(RamdomForest < LogisticRegression) %>% group_by(subclass) %>% summarise(best_lr = n())
sc3 = botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% filter(RamdomForest < NaiveBayes) %>% group_by(subclass) %>% summarise(best_nb = n())
sc4 = botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% filter(RamdomForest < SVM) %>% group_by(subclass) %>% summarise(best_svm = n())
botnet_prob_result_table_subclass = inner_join(subclass,sc1,by="subclass") %>% inner_join(sc2,by="subclass") %>% inner_join(sc3,by="subclass") %>% inner_join(sc4,by="subclass")
botnet_prob_result_table_subclass
ports = botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% group_by(port) %>% summarise(n = n()) %>% arrange(desc(n))
p1 = botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% filter(RamdomForest < KNN) %>% group_by(port) %>% summarise(best_knn = n())
p2 = botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% filter(RamdomForest < LogisticRegression) %>% group_by(port) %>% summarise(best_lr = n())
p3 = botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% filter(RamdomForest < NaiveBayes) %>% group_by(port) %>% summarise(best_nb = n())
p4 = botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% filter(RamdomForest < SVM) %>% group_by(port) %>% summarise(best_svm = n())
botnet_prob_result_table_port = inner_join(ports,p1,by="port") %>% inner_join(p2,by="port") %>% inner_join(p3,by="port") %>% inner_join(p4,by="port")
botnet_prob_result_table_port
protos = botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% group_by(proto) %>% summarise(n = n()) %>% arrange(desc(n))
pr1 = botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% filter(RamdomForest < KNN) %>% group_by(proto) %>% summarise(best_knn = n())
pr2 = botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% filter(RamdomForest < LogisticRegression) %>% group_by(proto) %>% summarise(best_lr = n())
pr3 = botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% filter(RamdomForest < NaiveBayes) %>% group_by(proto) %>% summarise(best_nb = n())
pr4 = botnet_prob_result %>% filter(TrueClass == 'Botnet') %>% filter(RamdomForest < SVM) %>% group_by(proto) %>% summarise(best_svm = n())
botnet_prob_result_table_proto = inner_join(protos,pr1,by="proto") %>% inner_join(pr2,by="proto") %>% inner_join(pr3,by="proto") %>% inner_join(pr4,by="proto")
botnet_prob_result_table_proto

Clustering and PCA

kmeans_mod<-kmeans(testing[,1:10],centers = 10)
testing_cluster<-cbind(testing,cluster=kmeans_mod$cluster)
pca<-prcomp(testing[,c(-11,-12,-13,-14)], center = TRUE, scale. = TRUE) 
pca_testing<-data.frame(pca$x,class=testing_cluster$class,
                              subclass=testing_cluster$subclass,
                               cluster=testing_cluster$cluster
                               )
g<-ggplot(pca_testing,aes(x=PC1,y=PC2))+
  geom_jitter(aes(color=as.factor(subclass),text=cluster,shape=class))+
  #geom_point(aes(shape=asignacion),size=3)+
  ylab("PC1")+xlab("PC2")+
  theme_classic()+
#scale_shape_manual(values=c(8,6))+
   guides(color=FALSE,alpha=FALSE)
Ignoring unknown aesthetics: text
ggplotly(g)
We recommend that you use the dev version of ggplot2 with `ggplotly()`
Install it with: `devtools::install_github('hadley/ggplot2')`
#Normal probabilistic table
normal_prob_result = data.frame(testing$class, predsrfprobs$Normal, knnPredict$Normal, logicRPredict$Normal, naiveBayesPredict$Normal ,svmPredict$Normal)
names(normal_prob_result) = c('True Class','Ramdom Forest','KNN','Logistic Regression', 'Naive Bayes', 'Suport VM')
normal_prob_result
LS0tCnRpdGxlOiAiQ29ubmVjdGlvbiBDbGFzc2lmaWNhdGlvbiIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gCgpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ3RybCtTaGlmdCtFbnRlciouIAoKYGBge3J9CnN1cHByZXNzTWVzc2FnZXMobGlicmFyeSh0aWR5dmVyc2UpKQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkoc3RyaW5ncikpCnN1cHByZXNzTWVzc2FnZXMobGlicmFyeShJU0xSKSkKc3VwcHJlc3NNZXNzYWdlcyhsaWJyYXJ5KGNhcmV0KSkKc3VwcHJlc3NNZXNzYWdlcyhsaWJyYXJ5KGRvTUMpKQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkocGxvdGx5KSkKcmVnaXN0ZXJEb01DKGNvcmVzPTQpCgpgYGAKCkFkZCBhIG5ldyBjaHVuayBieSBjbGlja2luZyB0aGUgKkluc2VydCBDaHVuayogYnV0dG9uIG9uIHRoZSB0b29sYmFyIG9yIGJ5IHByZXNzaW5nICpDdHJsK0FsdCtJKi4KCldoZW4geW91IHNhdmUgdGhlIG5vdGVib29rLCBhbiBIVE1MIGZpbGUgY29udGFpbmluZyB0aGUgY29kZSBhbmQgb3V0cHV0IHdpbGwgYmUgc2F2ZWQgYWxvbmdzaWRlIGl0IChjbGljayB0aGUgKlByZXZpZXcqIGJ1dHRvbiBvciBwcmVzcyAqQ3RybCtTaGlmdCtLKiB0byBwcmV2aWV3IHRoZSBIVE1MIGZpbGUpLgoKIyMjIEdldHRpbmcgYW5kIHByb2NjZXNpbmcgdGhlIGRhdGEKYGBge3J9CmxpYnJhcnkoc3RyaW5ncikKbXlEYXRhID0gcmVhZC5jc3YoJy4vZGF0YXNldHMvZGF0YV9hbGxfcmVzdWx0LnR4dCcsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGLCBzZXAgPSAnICcpCiNDcmVhdGUgZGF0YSBiYWNrdXAKbXlEYXRhLmJrdXAgPC0gbXlEYXRhCiNDcmVhdGUgbmV3IGNvbHVtbjogbGVuZ3RoIG9mIG1vZGVsLCBhbmQgbnVtYmVyIG9mIHBlcmlvZGljaXR5LCBkdXJhdGlvbiBhbmQgc2l6ZSBjaGFyYWN0ZXJpc3RpYyBpbiB0aGUgbW9kZWwuCm15RGF0YSA9IG15RGF0YSAlPiUgbXV0YXRlKGxldHRlcl9jb3VudCA9IG5jaGFyKFN0YXRlKSkKI1BlcmlvZGljaXR5Cm15RGF0YSA9IG15RGF0YSAlPiUgbXV0YXRlKHN0cm9uZ19wID0gc3RyX2NvdW50KFN0YXRlLCdbYS1pXScpKQpteURhdGEgPSBteURhdGEgJT4lIG11dGF0ZSh3ZWFrX3AgPSBzdHJfY291bnQoU3RhdGUsJ1tBLUldJykpCm15RGF0YSA9IG15RGF0YSAlPiUgbXV0YXRlKHdlYWtfbnAgPSBzdHJfY291bnQoU3RhdGUsJ1tyLXpdJykpCm15RGF0YSA9IG15RGF0YSAlPiUgbXV0YXRlKHN0cm9uZ19ucCA9IHN0cl9jb3VudChTdGF0ZSwnW1ItWl0nKSkKI0R1cmF0aW9uCm15RGF0YSA9IG15RGF0YSAlPiUgbXV0YXRlKGR1cmF0aW9uX3MgPSBzdHJfY291bnQoU3RhdGUsJyhhfEF8cnxSfDF8ZHxEfHV8VXw0fGd8R3x4fFh8NyknKSkKbXlEYXRhID0gbXlEYXRhICU+JSBtdXRhdGUoZHVyYXRpb25fbSA9IHN0cl9jb3VudChTdGF0ZSwnKGJ8QnxzfFN8MnxlfEV8dnxWfDV8aHxIfHl8WXw4KScpKQpteURhdGEgPSBteURhdGEgJT4lIG11dGF0ZShkdXJhdGlvbl9sID0gc3RyX2NvdW50KFN0YXRlLCcoY3xDfHR8VHwzfGZ8Rnx3fFd8NnxpfEl8enxafDkpJykpCiNTaXplCm15RGF0YSA9IG15RGF0YSAlPiUgbXV0YXRlKHNpemVfcyA9IHN0cl9jb3VudChTdGF0ZSwnW2EtY10nKSArIHN0cl9jb3VudChTdGF0ZSwnW0EtQ10nKSArIHN0cl9jb3VudChTdGF0ZSwnW3ItdF0nKSArIHN0cl9jb3VudChTdGF0ZSwnW1ItVF0nKSArIHN0cl9jb3VudChTdGF0ZSwnWzEtM10nKSkKbXlEYXRhID0gbXlEYXRhICU+JSBtdXRhdGUoc2l6ZV9tID0gc3RyX2NvdW50KFN0YXRlLCdbZC1mXScpICsgc3RyX2NvdW50KFN0YXRlLCdbRC1GXScpICsgc3RyX2NvdW50KFN0YXRlLCdbdS13XScpICsgc3RyX2NvdW50KFN0YXRlLCdbVS1XXScpICsgc3RyX2NvdW50KFN0YXRlLCdbNC02XScpKQpteURhdGEgPSBteURhdGEgJT4lIG11dGF0ZShzaXplX2wgPSBzdHJfY291bnQoU3RhdGUsJ1tnLWldJykgKyBzdHJfY291bnQoU3RhdGUsJ1tHLUldJykgKyBzdHJfY291bnQoU3RhdGUsJ1t4LXpdJykgKyBzdHJfY291bnQoU3RhdGUsJ1tYLVpdJykgKyBzdHJfY291bnQoU3RhdGUsJ1s3LTldJykpCgojUmVtb3ZlIGZyb20gTGFiZWxOYW1lIHVubmVjZXNzYXJ5IGNoYXJhY3RlcnMgKGVqOiBWNDIsIC0xNykKbXlEYXRhIDwtIG15RGF0YSAlPiUgbXV0YXRlKExhYmVsTmFtZSA9IGdzdWIoJ1ZbMC05XSstJywnJyxMYWJlbE5hbWUpKQpteURhdGEgPC0gbXlEYXRhICU+JSBtdXRhdGUoTGFiZWxOYW1lID0gZ3N1YignLVswLTldKycsJycsTGFiZWxOYW1lKSkKbXlEYXRhIDwtIG15RGF0YSAlPiUgbXV0YXRlKExhYmVsTmFtZSA9IGdzdWIoJ0NDWzAtOV0rLScsJ0NDLScsTGFiZWxOYW1lKSkKCiNLZWVwIG9ubHkgY29ubmVjdGlvbiB3aXRoIG1vcmUgdGhhbiAzIHN5bWJvbHMKbXlEYXRhIDwtIG15RGF0YSAlPiUgZmlsdGVyKGxldHRlcl9jb3VudCA+IDMpCgojUGVyaW9kaWNpdHkgJQpteURhdGEgPC0gbXlEYXRhICU+JSBtdXRhdGUoc3Ryb25nX3AgPSAoc3Ryb25nX3AgLyBsZXR0ZXJfY291bnQpKQpteURhdGEgPC0gbXlEYXRhICU+JSBtdXRhdGUod2Vha19wID0gKHdlYWtfcCAvIGxldHRlcl9jb3VudCkpCm15RGF0YSA8LSBteURhdGEgJT4lIG11dGF0ZShzdHJvbmdfbnAgPSAoc3Ryb25nX25wIC8gbGV0dGVyX2NvdW50KSkKbXlEYXRhIDwtIG15RGF0YSAlPiUgbXV0YXRlKHdlYWtfbnAgPSAod2Vha19ucCAvIGxldHRlcl9jb3VudCkpCiNEdXJhdGlvbiAlCm15RGF0YSA8LSBteURhdGEgJT4lIG11dGF0ZShkdXJhdGlvbl9zID0gKGR1cmF0aW9uX3MgLyBsZXR0ZXJfY291bnQpKQpteURhdGEgPC0gbXlEYXRhICU+JSBtdXRhdGUoZHVyYXRpb25fbSA9IChkdXJhdGlvbl9tIC8gbGV0dGVyX2NvdW50KSkKbXlEYXRhIDwtIG15RGF0YSAlPiUgbXV0YXRlKGR1cmF0aW9uX2wgPSAoZHVyYXRpb25fbCAvIGxldHRlcl9jb3VudCkpCiNTaXplICUKbXlEYXRhIDwtIG15RGF0YSAlPiUgbXV0YXRlKHNpemVfcyA9IChzaXplX3MgLyBsZXR0ZXJfY291bnQpKQpteURhdGEgPC0gbXlEYXRhICU+JSBtdXRhdGUoc2l6ZV9tID0gKHNpemVfbSAvIGxldHRlcl9jb3VudCkpCm15RGF0YSA8LSBteURhdGEgJT4lIG11dGF0ZShzaXplX2wgPSAoc2l6ZV9sIC8gbGV0dGVyX2NvdW50KSkKCiNoZWFkKG15RGF0YSkKbXlEYXRhWzE6MjAsXQoKI01ha2luZyBmZWF0dXJlIHZlY3RvcnMKZmVhdHVyZV92ZWN0b3JzID0gbXlEYXRhWyxjKCdzdHJvbmdfcCcsJ3dlYWtfcCcsJ3dlYWtfbnAnLCdzdHJvbmdfbnAnLCdkdXJhdGlvbl9zJywnZHVyYXRpb25fbScsJ2R1cmF0aW9uX2wnLCdzaXplX3MnLCdzaXplX20nLCdzaXplX2wnLCdsZXR0ZXJfY291bnQnLCdMYWJlbCcsJ0xhYmVsTmFtZScsJ3BvcnQnLCdwcm90bycpXQpuYW1lcyhmZWF0dXJlX3ZlY3RvcnMpID0gYygic3AiLCJ3cCIsInducCIsInNucCIsImRzIiwiZG0iLCJkbCIsInNzIiwic20iLCJzbCIsImxlbmd0aCIsImNsYXNzIiwic3ViY2xhc3MiLCJwb3J0IiwicHJvdG8iKQpmZWF0dXJlX3ZlY3RvcnMkY2xhc3MgPSBmYWN0b3IoZmVhdHVyZV92ZWN0b3JzJGNsYXNzKQpmZWF0dXJlX3ZlY3RvcnMkc3ViY2xhc3MgPSBmYWN0b3IoZmVhdHVyZV92ZWN0b3JzJHN1YmNsYXNzKQpmZWF0dXJlX3ZlY3RvcnMkcHJvdG8gPSBmYWN0b3IoZmVhdHVyZV92ZWN0b3JzJHByb3RvKQpgYGAKCiMjIyBDcmVhdGUgdHJhaW5pbmcgc2V0IGFuZCB0ZXN0c2V0CmBgYHtyfQpzZXQuc2VlZCgzMDApCnRyYWluSW5kZXggPC0gY3JlYXRlRGF0YVBhcnRpdGlvbihmZWF0dXJlX3ZlY3RvcnMkY2xhc3MsIHA9MC44MCwgbGlzdD1GQUxTRSkKZGF0YV90cmFpbiA8LSBmZWF0dXJlX3ZlY3RvcnNbIHRyYWluSW5kZXgsXQpkYXRhX3Rlc3QgPC0gZmVhdHVyZV92ZWN0b3JzWy10cmFpbkluZGV4LF0KCiNkYXRhX3RyYWluID0gZGF0YV90cmFpbiAlPiUgZmlsdGVyKGxlbmd0aD41KQp0cmFpbiA8LSB1cFNhbXBsZSh4ID0gZGF0YV90cmFpbiwgIHkgPSBkYXRhX3RyYWluJGNsYXNzLCB5bmFtZT0iY2xhc3MiKQojdHJhaW4gPC0gdXBTYW1wbGUoeCA9IHRyYWluLCAgeSA9IHRyYWluJHN1YmNsYXNzLCB5bmFtZT0iY2xhc3MiKQp0cmFpbmluZyA8LSB0cmFpblssLWMoMTEsMTIpXQp0ZXN0aW5nIDwtIGRhdGFfdGVzdFssLWMoMTEpXQp0cmFpbmluZwp0ZXN0aW5nCnRyYWluCgpjdHJsX2Zhc3QgPC0gdHJhaW5Db250cm9sKG1ldGhvZD0iY3YiLCAKICAgICAgICAgICAgICAgICAgICAgcmVwZWF0cz0yLAogICAgICAgICAgICAgICAgICAgICBudW1iZXI9MTAsIAogICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5RnVuY3Rpb249dHdvQ2xhc3NTdW1tYXJ5LAogICAgICAgICAgICAgICAgICAgICB2ZXJib3NlSXRlcj1ULAogICAgICAgICAgICAgICAgICAgICBjbGFzc1Byb2JzPVRSVUUsCiAgICAgICAgICAgICAgICAgICAgIGFsbG93UGFyYWxsZWwgPSBUUlVFKSAgCmN0cmwgPC0gdHJhaW5Db250cm9sKG1ldGhvZD0icmVwZWF0ZWRjdiIscmVwZWF0cyA9IDMpICMsY2xhc3NQcm9icz1UUlVFLHN1bW1hcnlGdW5jdGlvbiA9IHR3b0NsYXNzU3VtbWFyeSkKYGBgCgoKIyMjIFJhbmRvbSBGb3Jlc3QgQ2xhc3NpZmljYXRvcgpgYGB7cn0KICAjIFJhbmRvbSBGb3Jlc3QKcmZGaXQgPC0gdHJhaW4oY2xhc3MgfiBzcCt3cCt3bnArc25wK2RzK2RtK2RsK3NzK3NtK3NsLAogICAgICAgICAgICAgICBkYXRhID0gdHJhaW5pbmcsCiAgICAgICAgICAgICAgIG1ldHJpYz0iUk9DIiwKICAgICAgICAgICAgICAgbWV0aG9kID0gInJmIiwKICAgICAgICAgICAgICAgdHJDb250cm9sID0gY3RybF9mYXN0KQoKcmZGaXQKcmZGaXQkZmluYWxNb2RlbApgYGAKCmBgYHtyfQpwcmVkc3JmcHJvYnM9cHJlZGljdChyZkZpdCx0ZXN0aW5nLHR5cGU9J3Byb2InKQpwcmVkc3JmPWlmZWxzZShwcmVkc3JmcHJvYnMkQm90bmV0ID49MC45LCdCb3RuZXQnLCdOb3JtYWwnKQpjb25mdXNpb25NYXRyaXgocHJlZHNyZix0ZXN0aW5nJGNsYXNzKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkocGxvdFJPQykKc2VsZWN0ZWRJbmRpY2VzIDwtIHJmRml0JHByZWQkbXRyeSA9PSAyCmdncGxvdChjYmluZChwcmVkc3JmcHJvYnMsY2xhc3M9dGVzdGluZyRjbGFzcyksIAogICAgICAgYWVzKG0gPSBCb3RuZXQsIGQgPSBmYWN0b3IoY2xhc3MsIGxhYmVscz1jKCJOb3JtYWwiLCJCb3RuZXQiKSxsZXZlbHMgPSBjKCJOb3JtYWwiLCAiQm90bmV0IikpKSkgKyAKICAgIGdlb21fcm9jKGhqdXN0ID0gLTAuNCwgdmp1c3QgPSAxLjUsY29sb3VyPSdvcmFuZ2UnKSArIAogIHRoZW1lX2J3KCkKCmNiaW5kKHByZWRzcmZwcm9icyxjbGFzcz10ZXN0aW5nJGNsYXNzKQpgYGAKCgojIyMgS05OCmBgYHtyfQojQ2hlY2tpbmcgZGlzdGlidXRpb24gaW4gb3JpZ2FubCBkYXRhIGFuZCBwYXJ0aXRpb25lZCBkYXRhCnByb3AudGFibGUodGFibGUodHJhaW5pbmckY2xhc3MpKSAqIDEwMApwcm9wLnRhYmxlKHRhYmxlKHRlc3RpbmckY2xhc3MpKSAqIDEwMApwcm9wLnRhYmxlKHRhYmxlKGZlYXR1cmVfdmVjdG9ycyRjbGFzcykpICogMTAwCgp0cmFpblggPC0gdHJhaW5pbmdbLG5hbWVzKHRyYWluaW5nKSAhPSAiY2xhc3MiXQpwcmVQcm9jVmFsdWVzIDwtIHByZVByb2Nlc3MoeCA9IHRyYWluWCxtZXRob2QgPSBjKCJjZW50ZXIiLCAic2NhbGUiKSkKcHJlUHJvY1ZhbHVlcwpgYGAKYGBge3J9CmtubkZpdCA8LSB0cmFpbihjbGFzcyB+IHNwK3dwK3ducCtzbnArZHMrZG0rZGwrc3Mrc20rc2wsIGRhdGEgPSB0cmFpbmluZywgbWV0aG9kID0gImtubiIsIHRyQ29udHJvbCA9IGN0cmxfZmFzdCwgcHJlUHJvY2VzcyA9IGMoImNlbnRlciIsInNjYWxlIiksIHR1bmVMZW5ndGggPSAyMCkKCiNPdXRwdXQgb2Yga05OIGZpdAprbm5GaXQKYGBgCmBgYHtyfQojUGxvdHRpbmcgeWllbGRzIE51bWJlciBvZiBOZWlnaGJvdXJzIFZzIGFjY3VyYWN5IChiYXNlZCBvbiByZXBlYXRlZCBjcm9zcyB2YWxpZGF0aW9uKQpwbG90KGtubkZpdCkKYGBgCmBgYHtyfQprbm5QcmVkaWN0IDwtIHByZWRpY3Qoa25uRml0LG5ld2RhdGEgPSB0ZXN0aW5nICkKI0dldCB0aGUgY29uZnVzaW9uIG1hdHJpeCB0byBzZWUgYWNjdXJhY3kgdmFsdWUgYW5kIG90aGVyIHBhcmFtZXRlciB2YWx1ZXMKY29uZnVzaW9uTWF0cml4KGtublByZWRpY3QsIHRlc3RpbmckY2xhc3MgKQpgYGAKYGBge3J9Cm1lYW4oa25uUHJlZGljdCA9PSB0ZXN0aW5nJGNsYXNzKQpgYGAKYGBge3J9CmxpYnJhcnkocFJPQykKa25uUHJlZGljdCA8LSBwcmVkaWN0KGtubkZpdCxuZXdkYXRhID0gdGVzdGluZyAsIHR5cGU9InByb2IiKQprbm5ST0MgPC0gcm9jKHRlc3RpbmckY2xhc3Msa25uUHJlZGljdFssIkJvdG5ldCJdLCBsZXZlbHMgPSBjKCdOb3JtYWwnLCdCb3RuZXQnKSkjcmV2KHRlc3RpbmckY2xhc3MpKQprbm5ST0MKYGBgCgpgYGB7cn0KZ2dwbG90KGNiaW5kKGtublByZWRpY3QsY2xhc3M9dGVzdGluZyRjbGFzcyksIAogICAgICAgYWVzKG0gPSBCb3RuZXQsIGQgPSBmYWN0b3IoY2xhc3MsIGxhYmVscz1jKCJOb3JtYWwiLCJCb3RuZXQiKSxsZXZlbHMgPSBjKCJOb3JtYWwiLCAiQm90bmV0IikpKSkgKyAKICAgIGdlb21fcm9jKGhqdXN0ID0gLTAuNCwgdmp1c3QgPSAxLjUsY29sb3VyPSdvcmFuZ2UnKSArIAogIHRoZW1lX2J3KCkKCiNwbG90KGtublJPQywgdHlwZT0iUyIsIHByaW50LnRocmVzPSAwLjUpCmBgYAojIyMgTG9naXN0aWMgUmVncmVzc2lvbgoKYGBge3J9CmxvZ2ljUkZpdCA8LSB0cmFpbihjbGFzcyB+IHNwK3dwK3ducCtzbnArZHMrZG0rZGwrc3Mrc20rc2wsIG1ldGhvZD0nZ2xtJywgdHJDb250cm9sID0gY3RybF9mYXN0LHByZVByb2Nlc3M9Yygnc2NhbGUnLCAnY2VudGVyJyksIGRhdGE9dHJhaW5pbmcsIGZhbWlseT1iaW5vbWlhbChsaW5rPSdsb2dpdCcpKQojbG9naWNSRml0IDwtIHRyYWluKGNsYXNzIH4gc3Aqd3Aqd25wKnNucCpkcypkbSpkbCpzcypzbSpzbCwgbWV0aG9kPSdnbG0nLCB0ckNvbnRyb2wgPSBjdHJsX2Zhc3QscHJlUHJvY2Vzcz1jKCdzY2FsZScsICdjZW50ZXInKSwgZGF0YT10cmFpbmluZywgZmFtaWx5PWJpbm9taWFsKGxpbms9J2xvZ2l0JykpCiNsb2dpY1JGaXQgPC0gdHJhaW4oY2xhc3MgfiBzcCt3cCt3bnArc25wK2RzK2RtK2RsK3NzK3NtK3NsLCBtZXRob2Q9J2dsbScsIHRyQ29udHJvbCA9IGN0cmxfZmFzdCxwcmVQcm9jZXNzPWMoJ3NjYWxlJywgJ2NlbnRlcicpLCBkYXRhPXRyYWluaW5nLCBmYW1pbHk9Ymlub21pYWwobGluaz0nbG9naXQnKSkKCiNzdW1tYXJ5KGxvZ2ljUkZpdCkKI091dHB1dCBvZiBMb2dpc3RpYyBSZWdyZXNzaW9uIGZpdApsb2dpY1JGaXQKYGBgCgpgYGB7cn0KCmxvZ2ljUlByZWRpY3QgPC0gcHJlZGljdChsb2dpY1JGaXQsIG5ld2RhdGEgPSB0ZXN0aW5nICkKCmNvbmZ1c2lvbk1hdHJpeChsb2dpY1JQcmVkaWN0LCB0ZXN0aW5nJGNsYXNzKQpgYGAKYGBge3J9CmxvZ2ljUlByZWRpY3QgPC0gcHJlZGljdChsb2dpY1JGaXQsIG5ld2RhdGEgPSB0ZXN0aW5nLCB0eXBlPSJwcm9iIikKbG9naWNST0MgPC0gcm9jKHRlc3RpbmckY2xhc3MsbG9naWNSUHJlZGljdFssIkJvdG5ldCJdLCBsZXZlbHMgPSBjKCdOb3JtYWwnLCdCb3RuZXQnKSkjcmV2KHRlc3RpbmckY2xhc3MpKQoKZ2dwbG90KGNiaW5kKGxvZ2ljUlByZWRpY3QsY2xhc3M9dGVzdGluZyRjbGFzcyksIAogICAgICAgYWVzKG0gPSBCb3RuZXQsIGQgPSBmYWN0b3IoY2xhc3MsIGxhYmVscz1jKCJOb3JtYWwiLCJCb3RuZXQiKSxsZXZlbHMgPSBjKCJOb3JtYWwiLCAiQm90bmV0IikpKSkgKyAKICAgIGdlb21fcm9jKGhqdXN0ID0gLTAuNCwgdmp1c3QgPSAxLjUsY29sb3VyPSdvcmFuZ2UnKSArIAogIHRoZW1lX2J3KCkKCiNsb2dpY1JPQwpgYGAKCiMjIyBOYWl2ZSBCYXllcwpgYGB7cn0KbmFpdmVCYXllc0ZpdCA8LSB0cmFpbihjbGFzcyB+IHNwK3dwK3ducCtzbnArZHMrZG0rZGwrc3Mrc20rc2wsIG1ldGhvZD0nbmInLCB0ckNvbnRyb2wgPSBjdHJsX2Zhc3QscHJlUHJvY2Vzcz1jKCdzY2FsZScsICdjZW50ZXInKSwgZGF0YT10cmFpbmluZykKbmFpdmVCYXllc0ZpdApgYGAKCmBgYHtyfQpuYWl2ZUJheWVzUHJlZGljdCA8LSBwcmVkaWN0KG5haXZlQmF5ZXNGaXQsIG5ld2RhdGEgPSB0ZXN0aW5nKQoKY29uZnVzaW9uTWF0cml4KG5haXZlQmF5ZXNQcmVkaWN0LCB0ZXN0aW5nJGNsYXNzKQpgYGAKYGBge3J9Cm5haXZlQmF5ZXNQcmVkaWN0IDwtIHByZWRpY3QobmFpdmVCYXllc0ZpdCwgbmV3ZGF0YSA9IHRlc3RpbmcsIHR5cGUgPSAncHJvYicpCm5haXZlQmF5ZXNST0MgPC0gcm9jKHRlc3RpbmckY2xhc3MsbmFpdmVCYXllc1ByZWRpY3RbLCJCb3RuZXQiXSwgbGV2ZWxzID0gYygnTm9ybWFsJywnQm90bmV0JykpI3Jldih0ZXN0aW5nJGNsYXNzKSkKbmFpdmVCYXllc1JPQwoKZ2dwbG90KGNiaW5kKG5haXZlQmF5ZXNQcmVkaWN0LGNsYXNzPXRlc3RpbmckY2xhc3MpLCAKICAgICAgIGFlcyhtID0gQm90bmV0LCBkID0gZmFjdG9yKGNsYXNzLCBsYWJlbHM9YygiTm9ybWFsIiwiQm90bmV0IiksbGV2ZWxzID0gYygiTm9ybWFsIiwgIkJvdG5ldCIpKSkpICsgCiAgICBnZW9tX3JvYyhoanVzdCA9IC0wLjQsIHZqdXN0ID0gMS41LGNvbG91cj0nb3JhbmdlJykgKyAKICB0aGVtZV9idygpCgojcGxvdChuYWl2ZUJheWVzUk9DLCB0eXBlPSJTIiwgcHJpbnQudGhyZXM9IDAuNSkKYGBgCgoKIyMjIFN1cG9ydCBWZWN0b3IgTWFjaGluZQpgYGB7cn0Kc3ZtRml0IDwtIHRyYWluKGNsYXNzIH4gc3Ard3Ard25wK3NucCtkcytkbStkbCtzcytzbStzbCwgbWV0aG9kPSdzdm1MaW5lYXInLCB0ckNvbnRyb2wgPSBjdHJsX2Zhc3QscHJlUHJvY2Vzcz1jKCdzY2FsZScsICdjZW50ZXInKSwgZGF0YT10cmFpbmluZywgZmFtaWx5PWJpbm9taWFsKGxpbms9J2xvZ2l0JykpCnN2bUZpdApgYGAKCmBgYHtyfQpzdm1QcmVkaWN0IDwtIHByZWRpY3Qoc3ZtRml0LCBuZXdkYXRhID0gdGVzdGluZykKY29uZnVzaW9uTWF0cml4KHN2bVByZWRpY3QsIHRlc3RpbmckY2xhc3MpCmBgYAoKYGBge3J9CnN2bVByZWRpY3QgPC0gcHJlZGljdChzdm1GaXQsIG5ld2RhdGEgPSB0ZXN0aW5nLCB0eXBlID0gInByb2IiKQoKc3ZtUk9DIDwtIHJvYyh0ZXN0aW5nJGNsYXNzLHN2bVByZWRpY3RbLCJCb3RuZXQiXSwgbGV2ZWxzID0gYygnTm9ybWFsJywnQm90bmV0JykpI3Jldih0ZXN0aW5nJGNsYXNzKSkKc3ZtUk9DCgpnZ3Bsb3QoY2JpbmQoc3ZtUHJlZGljdCxjbGFzcz10ZXN0aW5nJGNsYXNzKSwgCiAgICAgICBhZXMobSA9IEJvdG5ldCwgZCA9IGZhY3RvcihjbGFzcywgbGFiZWxzPWMoIk5vcm1hbCIsIkJvdG5ldCIpLGxldmVscyA9IGMoIk5vcm1hbCIsICJCb3RuZXQiKSkpKSArIAogICAgZ2VvbV9yb2MoaGp1c3QgPSAtMC40LCB2anVzdCA9IDEuNSxjb2xvdXI9J29yYW5nZScpICsgCiAgdGhlbWVfYncoKQoKYGBgCgoKIyMjIENvbXBhcmluZyBNb2RlbHMKYGBge3J9CnJlc2FtcHMgPC0gcmVzYW1wbGVzKGxpc3QocmYgPSByZkZpdCwgbHIgPSBsb2dpY1JGaXQsIG52ID0gbmFpdmVCYXllc0ZpdCwgc3ZtID0gc3ZtRml0KSkKc3VtbWFyeShyZXNhbXBzKQpid3Bsb3QocmVzYW1wcykKZGlmZnMgPC0gZGlmZihyZXNhbXBzKQpzdW1tYXJ5KGRpZmZzKQp2YWx1ZXM9cmVzYW1wcyR2YWx1ZXMKdmFsdWVzCm5hbWVzKHZhbHVlcylbMl08LSJyZlNlbnMiCgpnZ3Bsb3QodmFsdWVzKSsKICBnZW9tX2JveHBsb3QoYWVzKHk9cmZTZW5zLHg9MSkpCgpgYGAKIyMjIE1ha2luZyBwcm9iYWJpbGlzdGljIHRhYmxlLgpgYGB7cn0KIyBCb3RuZXQgcHJvYmFiaWxpc3RpYyB0YWJsZQpib3RuZXRfcHJvYl9yZXN1bHQgPSBkYXRhLmZyYW1lKHRlc3RpbmckY2xhc3MsIHByZWRzcmZwcm9icyRCb3RuZXQsIGtublByZWRpY3QkQm90bmV0LCBsb2dpY1JQcmVkaWN0JEJvdG5ldCwgbmFpdmVCYXllc1ByZWRpY3QkQm90bmV0ICxzdm1QcmVkaWN0JEJvdG5ldCwgdGVzdGluZyRzdWJjbGFzcywgdGVzdGluZyRwb3J0LCB0ZXN0aW5nJHByb3RvKQojYm90bmV0X3Byb2JfcmVzdWx0ID0gYm90bmV0X3Byb2JfcmVzdWx0ICU+JSBtdXRhdGUoc3ViY2xhc3MgPSBkYXRhX3Rlc3Qkc3ViY2xhc3MpCm5hbWVzKGJvdG5ldF9wcm9iX3Jlc3VsdCkgPSBjKCdUcnVlQ2xhc3MnLCdSYW1kb21Gb3Jlc3QnLCdLTk4nLCdMb2dpc3RpY1JlZ3Jlc3Npb24nLCAnTmFpdmVCYXllcycsICdTVk0nLCdzdWJjbGFzcycsJ3BvcnQnLCdwcm90bycpCmJvdG5ldF9wcm9iX3Jlc3VsdApgYGAKCgpgYGB7cn0KI2xvYWQoIi4vYm90bmV0X3Byb2JfcmVzdWx0cy5SZGEiKQpsaWJyYXJ5KGdyaWQpCmxpYnJhcnkoZ3JpZEV4dHJhKQpib3RuZXRfcHJvYl9yZXN1bHQgJT4lIGdyb3VwX2J5KHN1YmNsYXNzKSAlPiUgc3VtbWFyaXNlKG49bigpLHN1bV9SRj1zdW0oUmFtZG9tRm9yZXN0KSxzdW1fS05OPXN1bShLTk4pLHN1bV9MUj1zdW0oTG9naXN0aWNSZWdyZXNzaW9uKSxzdW1fTkI9c3VtKE5haXZlQmF5ZXMpLHN1bV9TVk09c3VtKFNWTSkpICU+JSBhcnJhbmdlKGRlc2MobikpCmJvdG5ldF9wcm9iX3Jlc3VsdCAlPiUgZ3JvdXBfYnkoc3ViY2xhc3MpICU+JSBzdW1tYXJpc2Uobj1uKCksbWVhbj1tZWFuKE5haXZlQmF5ZXMpLHNkPXNkKE5haXZlQmF5ZXMpKSAlPiUgYXJyYW5nZShkZXNjKG4pKSU+JSB0b3BfbigxMCkKYm90bmV0XzEwX3RvcDwtYm90bmV0X3Byb2JfcmVzdWx0ICU+JSBmaWx0ZXIoVHJ1ZUNsYXNzID09ICdCb3RuZXQnKSAlPiUgZ3JvdXBfYnkoc3ViY2xhc3MpICU+JSBzdW1tYXJpc2Uobj1uKCkpICU+JSBhcnJhbmdlKGRlc2MobikpJT4lIHRvcF9uKDEwKQoKYm90bmV0XzEwX3RvcDwtaW5uZXJfam9pbihib3RuZXRfMTBfdG9wLGJvdG5ldF9wcm9iX3Jlc3VsdCxieT0ic3ViY2xhc3MiKQoKcmZfcGxvdDwtYndwbG90KHN1YmNsYXNzflJhbWRvbUZvcmVzdCxkYXRhPWJvdG5ldF8xMF90b3AsZG8ub3V0ID0gRkFMU0Usc2NhbGVzPWxpc3QoeT1saXN0KGRyYXc9RkFMU0UpKSkKa25uX3Bsb3Q8LWJ3cGxvdChzdWJjbGFzc35LTk4sZGF0YT1ib3RuZXRfMTBfdG9wLGRvLm91dCA9IEZBTFNFLHNjYWxlcz1saXN0KHk9bGlzdChkcmF3PUZBTFNFKSkpCnJsX3Bsb3Q8LWJ3cGxvdChzdWJjbGFzc35Mb2dpc3RpY1JlZ3Jlc3Npb24sZGF0YT1ib3RuZXRfMTBfdG9wLGRvLm91dCA9IEZBTFNFLHNjYWxlcz1saXN0KHk9bGlzdChkcmF3PUZBTFNFKSkpCnN2bV9wbG90PC1id3Bsb3Qoc3ViY2xhc3N+U1ZNLGRhdGE9Ym90bmV0XzEwX3RvcCxkby5vdXQgPSBGQUxTRSxzY2FsZXM9bGlzdCh5PWxpc3QoZHJhdz1GQUxTRSkpKQoKcGwgPSBsaXN0KGtubl9wbG90LCByZl9wbG90LHJsX3Bsb3Qsc3ZtX3Bsb3QpCiMgZG8uY2FsbChncmlkLmFycmFuZ2UsIGMocGwsIG5yb3c9MSkpCmRvLmNhbGwoZ3JpZC5hcnJhbmdlLCBjKGxhcHBseShwbCwgdXBkYXRlKSwgbGlzdChucm93PTEpKSkKYGBgCgojIyMjIHNvbWUgaGVhdG1hcHMKYGBge3IgaGVhdG1hcHN9CmxpYnJhcnkoc2NhbGVzKQprbm5fbTwtbWF0cml4KGJvdG5ldF9wcm9iX3Jlc3VsdFsxOjE4MzAsXSRLTk4sbmNvbD0zMCxucm93PTYxKQpzdm1fbTwtbWF0cml4KGJvdG5ldF9wcm9iX3Jlc3VsdFsxOjE4MzAsXSRTVk0sbmNvbD0zMCxucm93PTYxKQpscl9tPC1tYXRyaXgoYm90bmV0X3Byb2JfcmVzdWx0WzE6MTgzMCxdJExvZ2lzdGljUmVncmVzc2lvbixuY29sPTMwLG5yb3c9NjEpCm5iX208LW1hdHJpeChib3RuZXRfcHJvYl9yZXN1bHRbMToxODMwLF0kTmFpdmVCYXllcyxuY29sPTMwLG5yb3c9NjEpCnJmX208LW1hdHJpeChib3RuZXRfcHJvYl9yZXN1bHRbMToxODMwLF0kUmFtZG9tRm9yZXN0LG5jb2w9MzAsbnJvdz02MSkKCm1kZjwtYXMuZGF0YS5mcmFtZShrbm5fbSkKbWRmPC1jYmluZChtZGYsaWQ9c2VxKDE6NjEpKQptZGY8LXJlc2hhcGUyOjptZWx0KG1kZixpZC52YXJzPWMoImlkIikpCmgxPC1nZ3Bsb3QobWRmKSsKICBnZW9tX3RpbGUoYWVzKHg9aWQseT12YXJpYWJsZSxmaWxsPXZhbHVlKSwKICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIikgKwogIHNjYWxlX2ZpbGxfZ3JhZGllbnQobG93ID0gIndoaXRlIiwKICAgIGhpZ2ggPSAib3JhbmdlIikreWxhYigiIikreGxhYigiIikrCiAgZ3VpZGVzKGZpbGw9RkFMU0UpCgoKbWRmPC1hcy5kYXRhLmZyYW1lKHN2bV9tKQptZGY8LWNiaW5kKG1kZixpZD1zZXEoMTo2MSkpCm1kZjwtcmVzaGFwZTI6Om1lbHQobWRmLGlkLnZhcnM9YygiaWQiKSkKaDI8LWdncGxvdChtZGYpKwogIGdlb21fdGlsZShhZXMoeD1pZCx5PXZhcmlhYmxlLGZpbGw9dmFsdWUpLAogICAgICAgICAgICBjb2xvdXIgPSAid2hpdGUiKSArCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3cgPSAid2hpdGUiLAogICAgaGlnaCA9ICJvcmFuZ2UiKSt5bGFiKCIiKSt4bGFiKCIiKSsKICBndWlkZXMoZmlsbD1GQUxTRSkKCgptZGY8LWFzLmRhdGEuZnJhbWUocmZfbSkKbWRmPC1jYmluZChtZGYsaWQ9c2VxKDE6NjEpKQptZGY8LXJlc2hhcGUyOjptZWx0KG1kZixpZC52YXJzPWMoImlkIikpCmgzPC1nZ3Bsb3QobWRmKSsKICBnZW9tX3RpbGUoYWVzKHg9aWQseT12YXJpYWJsZSxmaWxsPXZhbHVlKSwKICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIikgKwogIHNjYWxlX2ZpbGxfZ3JhZGllbnQobG93ID0gIndoaXRlIiwKICAgIGhpZ2ggPSAib3JhbmdlIikreWxhYigiIikreGxhYigiIikrCiAgZ3VpZGVzKGZpbGw9RkFMU0UpCgoKbWRmPC1hcy5kYXRhLmZyYW1lKG5iX20pCm1kZjwtY2JpbmQobWRmLGlkPXNlcSgxOjYxKSkKbWRmPC1yZXNoYXBlMjo6bWVsdChtZGYsaWQudmFycz1jKCJpZCIpKQpoNDwtZ2dwbG90KG1kZikrCiAgZ2VvbV90aWxlKGFlcyh4PWlkLHk9dmFyaWFibGUsZmlsbD12YWx1ZSksCiAgICAgICAgICAgIGNvbG91ciA9ICJ3aGl0ZSIpICsKICBzY2FsZV9maWxsX2dyYWRpZW50KGxvdyA9ICJ3aGl0ZSIsCiAgICBoaWdoID0gIm9yYW5nZSIpK3lsYWIoIiIpK3hsYWIoIiIpKwogIGd1aWRlcyhmaWxsPUZBTFNFKQpncmlkLmFycmFuZ2UoaDEsaDIsaDMsaDQsbmNvbD0yLG5yb3c9MikKYGBgCgojIyMjIGRpZmZlcmVuY2UgaGVhdG1hcHMKYGBge3IgaGVhdG1hcCBkaWZmfQptZGY8LWFzLmRhdGEuZnJhbWUocmZfbSAtIGtubl9tKQptZGY8LWNiaW5kKG1kZixpZD1zZXEoMTo2MSkpCm1kZjwtcmVzaGFwZTI6Om1lbHQobWRmLGlkLnZhcnM9YygiaWQiKSkKbWRmPC1jYmluZChtZGYsc3ViY2xhc3M9KGJvdG5ldF9wcm9iX3Jlc3VsdFsxOjE4MzAsXSRzdWJjbGFzcykpCgpkaWZmPC1nZ3Bsb3QobWRmKSsKICBnZW9tX3RpbGUoYWVzKHg9aWQseT12YXJpYWJsZSxmaWxsPXZhbHVlLHRleHQ9c3ViY2xhc3MpLAogICAgICAgICAgICBjb2xvdXIgPSAid2hpdGUiKSArCiAgc2NhbGVfZmlsbF9ncmFkaWVudG4oY29sb3Vycz1jKCJyZWQiLCJ3aGl0ZSIsImdyZWVuIiksCiAgICAgICAgICAgdmFsdWVzICA9IHJlc2NhbGUoYyhtaW4obWRmJHZhbHVlKSwgMC4wNSwgbWF4KG1kZiR2YWx1ZSkpKSkrCiAgICAgICAgICAgZ3VpZGVzKGZpbGw9RkFMU0UpK3RoZW1lX2J3KCkgIApnZ3Bsb3RseShkaWZmKQpkM2hlYXRtYXAocmZfbSAtIGtubl9tLGNvbG9ycyA9ICJCbHVlcyIsY2VsbG5vdGU9bWF0cml4KGJvdG5ldF9wcm9iX3Jlc3VsdFsxOjE4MzAsXSRzdWJjbGFzcyxuY29sPTMwLG5yb3c9NjEpKQpgYGAKCiMjIyBTdWJjbGFzcyBwcm9iYWJpbGl0eSBhbmFsaXN5cyAoQXR0ZW1wdCBJKQpLTk4gdnMgUkYuCmBgYHtyfQphPW1kZiAlPiUgZmlsdGVyKHZhbHVlPCAtMC4wOSkgJT4lIGdyb3VwX2J5KHN1YmNsYXNzKSAlPiUgc3VtbWFyaXNlKHRvdGxlc3MwMDk9bigpKSAlPiUgYXJyYW5nZShkZXNjKHRvdGxlc3MwMDkpKQpiPW1kZiAgJT4lIGdyb3VwX2J5KHN1YmNsYXNzKSAlPiUgc3VtbWFyaXNlKHRvdGFsPW4oKSkgJT4lIGFycmFuZ2UoZGVzYyh0b3RhbCkpCgpzdWJjbGFzc19wZXJjZW50X2RpZmY8LWlubmVyX2pvaW4oYSxiLGJ5PSJzdWJjbGFzcyIpICU+JSBtdXRhdGUocGVyY2VudD10b3RsZXNzMDA5L3RvdGFsKSAlPiUgYXJyYW5nZShkZXNjKHRvdGFsKSkgCnN1YmNsYXNzX3BlcmNlbnRfZGlmZgoKc3ViY2xhc3NfZGV0ZWN0aW9uczwtYm90bmV0X3Byb2JfcmVzdWx0ICU+JSBtdXRhdGUoZGV0ZWN0ZWRfcmY9aWZlbHNlKFJhbWRvbUZvcmVzdD4wLjUsIkJvdG5ldCIsIk5vcm1hbCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZF9rbm49aWZlbHNlKEtOTj4wLjUsIkJvdG5ldCIsIk5vcm1hbCIpKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShjb3JyZWN0X3JmPWlmZWxzZShkZXRlY3RlZF9yZj09VHJ1ZUNsYXNzLDEsMCkpJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShjb3JyZWN0X2tubj1pZmVsc2UoZGV0ZWN0ZWRfa25uPT1UcnVlQ2xhc3MsMSwwKSkgJT4lIAogIGdyb3VwX2J5KHN1YmNsYXNzKSAlPiUgc3VtbWFyaXNlKHRvdGFsX2NvcnJlY3RfcmY9c3VtKGNvcnJlY3RfcmYpLHRvdGFsX2NvcnJlY3Rfa25uPXN1bShjb3JyZWN0X2tubikpCgoKaW5uZXJfam9pbihzdWJjbGFzc19kZXRlY3Rpb25zLHN1YmNsYXNzX3BlcmNlbnRfZGlmZixieT0ic3ViY2xhc3MiKQoKbWRmPC1jYmluZChtZGYscmY9Ym90bmV0X3Byb2JfcmVzdWx0JFJhbWRvbUZvcmVzdFsxOjE4MzBdLGtubj1ib3RuZXRfcHJvYl9yZXN1bHQkS05OWzE6MTgzMF0sdHJ1ZWNsYXNzPWJvdG5ldF9wcm9iX3Jlc3VsdCRUcnVlQ2xhc3NbMToxODMwXSkKYm90bmV0X3Byb2JfcmVzdWx0Cm1kZiAlPiUgZmlsdGVyKHZhbHVlPCAtMC4wOSkgJT4lIGZpbHRlcih0cnVlY2xhc3M9PSJCb3RuZXQiKQptZGYgJT4lIGZpbHRlcih2YWx1ZT4gMC4wOSkgJT4lIGZpbHRlcih0cnVlY2xhc3M9PSJOb3JtYWwiKQoKCmBgYAojIyMgU3ViY2xhc3MgcHJvYmFiaWxpdHkgYW5hbGlzeXMgKEF0dGVtcHQgSUkpClJhbmRvbSBGb3Jlc3QgdnMuIHdvcmxkCmBgYHtyfQpib3RuZXRfcHJvYl9yZXN1bHQgJT4lIGZpbHRlcihUcnVlQ2xhc3MgPT0gJ0JvdG5ldCcpICU+JSBncm91cF9ieShzdWJjbGFzcykgJT4lIHN1bW1hcmlzZShuPW4oKSxzdW1fUkY9c3VtKFJhbWRvbUZvcmVzdCksc3VtX0tOTj1zdW0oS05OKSxzdW1fTFI9c3VtKExvZ2lzdGljUmVncmVzc2lvbiksc3VtX05CPXN1bShOYWl2ZUJheWVzKSxzdW1fU1ZNPXN1bShTVk0pKSAlPiUgYXJyYW5nZShkZXNjKG4pKQoKc3ViY2xhc3MgPSBib3RuZXRfcHJvYl9yZXN1bHQgJT4lIGZpbHRlcihUcnVlQ2xhc3MgPT0gJ0JvdG5ldCcpICU+JSBncm91cF9ieShzdWJjbGFzcykgJT4lIHN1bW1hcmlzZShuID0gbigpKSAlPiUgYXJyYW5nZShkZXNjKG4pKQpzYzEgPSBib3RuZXRfcHJvYl9yZXN1bHQgJT4lIGZpbHRlcihUcnVlQ2xhc3MgPT0gJ0JvdG5ldCcpICU+JSBmaWx0ZXIoUmFtZG9tRm9yZXN0IDwgS05OKSAlPiUgZ3JvdXBfYnkoc3ViY2xhc3MpICU+JSBzdW1tYXJpc2UoYmVzdF9rbm4gPSBuKCkpCnNjMiA9IGJvdG5ldF9wcm9iX3Jlc3VsdCAlPiUgZmlsdGVyKFRydWVDbGFzcyA9PSAnQm90bmV0JykgJT4lIGZpbHRlcihSYW1kb21Gb3Jlc3QgPCBMb2dpc3RpY1JlZ3Jlc3Npb24pICU+JSBncm91cF9ieShzdWJjbGFzcykgJT4lIHN1bW1hcmlzZShiZXN0X2xyID0gbigpKQpzYzMgPSBib3RuZXRfcHJvYl9yZXN1bHQgJT4lIGZpbHRlcihUcnVlQ2xhc3MgPT0gJ0JvdG5ldCcpICU+JSBmaWx0ZXIoUmFtZG9tRm9yZXN0IDwgTmFpdmVCYXllcykgJT4lIGdyb3VwX2J5KHN1YmNsYXNzKSAlPiUgc3VtbWFyaXNlKGJlc3RfbmIgPSBuKCkpCnNjNCA9IGJvdG5ldF9wcm9iX3Jlc3VsdCAlPiUgZmlsdGVyKFRydWVDbGFzcyA9PSAnQm90bmV0JykgJT4lIGZpbHRlcihSYW1kb21Gb3Jlc3QgPCBTVk0pICU+JSBncm91cF9ieShzdWJjbGFzcykgJT4lIHN1bW1hcmlzZShiZXN0X3N2bSA9IG4oKSkKYm90bmV0X3Byb2JfcmVzdWx0X3RhYmxlX3N1YmNsYXNzID0gaW5uZXJfam9pbihzdWJjbGFzcyxzYzEsYnk9InN1YmNsYXNzIikgJT4lIGlubmVyX2pvaW4oc2MyLGJ5PSJzdWJjbGFzcyIpICU+JSBpbm5lcl9qb2luKHNjMyxieT0ic3ViY2xhc3MiKSAlPiUgaW5uZXJfam9pbihzYzQsYnk9InN1YmNsYXNzIikKYm90bmV0X3Byb2JfcmVzdWx0X3RhYmxlX3N1YmNsYXNzCgpwb3J0cyA9IGJvdG5ldF9wcm9iX3Jlc3VsdCAlPiUgZmlsdGVyKFRydWVDbGFzcyA9PSAnQm90bmV0JykgJT4lIGdyb3VwX2J5KHBvcnQpICU+JSBzdW1tYXJpc2UobiA9IG4oKSkgJT4lIGFycmFuZ2UoZGVzYyhuKSkKcDEgPSBib3RuZXRfcHJvYl9yZXN1bHQgJT4lIGZpbHRlcihUcnVlQ2xhc3MgPT0gJ0JvdG5ldCcpICU+JSBmaWx0ZXIoUmFtZG9tRm9yZXN0IDwgS05OKSAlPiUgZ3JvdXBfYnkocG9ydCkgJT4lIHN1bW1hcmlzZShiZXN0X2tubiA9IG4oKSkKcDIgPSBib3RuZXRfcHJvYl9yZXN1bHQgJT4lIGZpbHRlcihUcnVlQ2xhc3MgPT0gJ0JvdG5ldCcpICU+JSBmaWx0ZXIoUmFtZG9tRm9yZXN0IDwgTG9naXN0aWNSZWdyZXNzaW9uKSAlPiUgZ3JvdXBfYnkocG9ydCkgJT4lIHN1bW1hcmlzZShiZXN0X2xyID0gbigpKQpwMyA9IGJvdG5ldF9wcm9iX3Jlc3VsdCAlPiUgZmlsdGVyKFRydWVDbGFzcyA9PSAnQm90bmV0JykgJT4lIGZpbHRlcihSYW1kb21Gb3Jlc3QgPCBOYWl2ZUJheWVzKSAlPiUgZ3JvdXBfYnkocG9ydCkgJT4lIHN1bW1hcmlzZShiZXN0X25iID0gbigpKQpwNCA9IGJvdG5ldF9wcm9iX3Jlc3VsdCAlPiUgZmlsdGVyKFRydWVDbGFzcyA9PSAnQm90bmV0JykgJT4lIGZpbHRlcihSYW1kb21Gb3Jlc3QgPCBTVk0pICU+JSBncm91cF9ieShwb3J0KSAlPiUgc3VtbWFyaXNlKGJlc3Rfc3ZtID0gbigpKQpib3RuZXRfcHJvYl9yZXN1bHRfdGFibGVfcG9ydCA9IGlubmVyX2pvaW4ocG9ydHMscDEsYnk9InBvcnQiKSAlPiUgaW5uZXJfam9pbihwMixieT0icG9ydCIpICU+JSBpbm5lcl9qb2luKHAzLGJ5PSJwb3J0IikgJT4lIGlubmVyX2pvaW4ocDQsYnk9InBvcnQiKQpib3RuZXRfcHJvYl9yZXN1bHRfdGFibGVfcG9ydAoKcHJvdG9zID0gYm90bmV0X3Byb2JfcmVzdWx0ICU+JSBmaWx0ZXIoVHJ1ZUNsYXNzID09ICdCb3RuZXQnKSAlPiUgZ3JvdXBfYnkocHJvdG8pICU+JSBzdW1tYXJpc2UobiA9IG4oKSkgJT4lIGFycmFuZ2UoZGVzYyhuKSkKcHIxID0gYm90bmV0X3Byb2JfcmVzdWx0ICU+JSBmaWx0ZXIoVHJ1ZUNsYXNzID09ICdCb3RuZXQnKSAlPiUgZmlsdGVyKFJhbWRvbUZvcmVzdCA8IEtOTikgJT4lIGdyb3VwX2J5KHByb3RvKSAlPiUgc3VtbWFyaXNlKGJlc3Rfa25uID0gbigpKQpwcjIgPSBib3RuZXRfcHJvYl9yZXN1bHQgJT4lIGZpbHRlcihUcnVlQ2xhc3MgPT0gJ0JvdG5ldCcpICU+JSBmaWx0ZXIoUmFtZG9tRm9yZXN0IDwgTG9naXN0aWNSZWdyZXNzaW9uKSAlPiUgZ3JvdXBfYnkocHJvdG8pICU+JSBzdW1tYXJpc2UoYmVzdF9sciA9IG4oKSkKcHIzID0gYm90bmV0X3Byb2JfcmVzdWx0ICU+JSBmaWx0ZXIoVHJ1ZUNsYXNzID09ICdCb3RuZXQnKSAlPiUgZmlsdGVyKFJhbWRvbUZvcmVzdCA8IE5haXZlQmF5ZXMpICU+JSBncm91cF9ieShwcm90bykgJT4lIHN1bW1hcmlzZShiZXN0X25iID0gbigpKQpwcjQgPSBib3RuZXRfcHJvYl9yZXN1bHQgJT4lIGZpbHRlcihUcnVlQ2xhc3MgPT0gJ0JvdG5ldCcpICU+JSBmaWx0ZXIoUmFtZG9tRm9yZXN0IDwgU1ZNKSAlPiUgZ3JvdXBfYnkocHJvdG8pICU+JSBzdW1tYXJpc2UoYmVzdF9zdm0gPSBuKCkpCmJvdG5ldF9wcm9iX3Jlc3VsdF90YWJsZV9wcm90byA9IGlubmVyX2pvaW4ocHJvdG9zLHByMSxieT0icHJvdG8iKSAlPiUgaW5uZXJfam9pbihwcjIsYnk9InByb3RvIikgJT4lIGlubmVyX2pvaW4ocHIzLGJ5PSJwcm90byIpICU+JSBpbm5lcl9qb2luKHByNCxieT0icHJvdG8iKQpib3RuZXRfcHJvYl9yZXN1bHRfdGFibGVfcHJvdG8KYGBgCgoKIyMjIENsdXN0ZXJpbmcgYW5kIFBDQQpgYGB7ciBjbHVzdGVyaW5nfQoKa21lYW5zX21vZDwta21lYW5zKHRlc3RpbmdbLDE6MTBdLGNlbnRlcnMgPSAxMCkKdGVzdGluZ19jbHVzdGVyPC1jYmluZCh0ZXN0aW5nLGNsdXN0ZXI9a21lYW5zX21vZCRjbHVzdGVyKQpwY2E8LXByY29tcCh0ZXN0aW5nWyxjKC0xMSwtMTIsLTEzLC0xNCldLCBjZW50ZXIgPSBUUlVFLCBzY2FsZS4gPSBUUlVFKSAKcGNhX3Rlc3Rpbmc8LWRhdGEuZnJhbWUocGNhJHgsY2xhc3M9dGVzdGluZ19jbHVzdGVyJGNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJjbGFzcz10ZXN0aW5nX2NsdXN0ZXIkc3ViY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyPXRlc3RpbmdfY2x1c3RlciRjbHVzdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCmc8LWdncGxvdChwY2FfdGVzdGluZyxhZXMoeD1QQzEseT1QQzIpKSsKICBnZW9tX2ppdHRlcihhZXMoY29sb3I9YXMuZmFjdG9yKHN1YmNsYXNzKSx0ZXh0PWNsdXN0ZXIsc2hhcGU9Y2xhc3MpKSsKICAjZ2VvbV9wb2ludChhZXMoc2hhcGU9YXNpZ25hY2lvbiksc2l6ZT0zKSsKICB5bGFiKCJQQzEiKSt4bGFiKCJQQzIiKSsKICB0aGVtZV9jbGFzc2ljKCkrCiNzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzPWMoOCw2KSkrCiAgIGd1aWRlcyhjb2xvcj1GQUxTRSxhbHBoYT1GQUxTRSkKZ2dwbG90bHkoZykKCmBgYAoKYGBge3J9CiNOb3JtYWwgcHJvYmFiaWxpc3RpYyB0YWJsZQpub3JtYWxfcHJvYl9yZXN1bHQgPSBkYXRhLmZyYW1lKHRlc3RpbmckY2xhc3MsIHByZWRzcmZwcm9icyROb3JtYWwsIGtublByZWRpY3QkTm9ybWFsLCBsb2dpY1JQcmVkaWN0JE5vcm1hbCwgbmFpdmVCYXllc1ByZWRpY3QkTm9ybWFsICxzdm1QcmVkaWN0JE5vcm1hbCkKbmFtZXMobm9ybWFsX3Byb2JfcmVzdWx0KSA9IGMoJ1RydWUgQ2xhc3MnLCdSYW1kb20gRm9yZXN0JywnS05OJywnTG9naXN0aWMgUmVncmVzc2lvbicsICdOYWl2ZSBCYXllcycsICdTdXBvcnQgVk0nKQpub3JtYWxfcHJvYl9yZXN1bHQKYGBgCgo=